2016-04-09 10 views
0

In der Steuerung review_queue Ich habe eine benutzerdefinierte Aktion, die ein Ergebnis an eine Ziel-URL sendet, möchte ich ein Formular für diese Aktion erstellen. Ich werde keine der Felder in der Datenbank speichern. Ich übergebe sie nur in den Params an die post_review Aktion.Rails form_for Senden von Parametern an die Controller-Aktion und nicht Modell

def post_review 
    RestClient::Request.execute(:method => :post, 
           :url => Rails.application.secrets['target_url'], 
           :content_type => :json, 
           :payload => @result_params.merge!(params[:reasons]).to_json, 
           :headers => HEADERS) 
end 

In der Ansicht, die ich ein Formular haben, und anschließend auf ausgefüllt wird, die Gründe senden sollte, wenn das Formular übergeben wird, ich die review_queue_id und die status in Form bin Einstellung, da diese statisch sind , aber die Gründe sollten

<%= form_for(:review_queue, url: { action: 'post_review', :review_queue_id => @review_queue.id, :status => 'accepted'}) do |f| %> 
    <div class='form-group'> 
    <label for='comment'>Please give a reason? (required)</label> 
    <%= f.text_area(:reasons, placeholder: 'Your commentns ...', rows: 9, class: 'form-control') %> 
    </div> 
    <div class='modal-footer'> 
    <%= f.submit 'Approve', class: 'btn btn-success btn-decission btn-modal-left-side' %> 
    <button type='button' class='btn btn-default' data-dismiss='modal'>Close</button> 
    </div> 
<% end %> 

Fehlermeldung aus dem Text kommen:

NoMethodError - undefined method `reasons' for #<ReviewQueueApplication:0x007fa7ff7832d8>: 

Es scheint, als ob Schienen die MVC-Architektur hier unter der Annahme, und angenommen, ich möchte die Gründe für das review_queue Modell übergeben. Es gibt keine Gründe-Spalte, so dass es keinen Methodenfehler gibt. Gibt es eine Möglichkeit, anzugeben, dass das Formular "temporär" ist und nur bis zum Controller reicht?

Dies scheint wie es eine einfache Sache sein sollte, aber es gibt einige Schienen Magie hier passiert.

Antwort

1

NoMethodError - nicht definierte Methode `Gründe für ReviewQueueApplication: 0x007fa7ff7832d8

form_for geht davon aus, dass Sie ein Formular für ein Modellobjekt und erwartet, dass die Felder vorhanden sein schaffen in diesem spezifischen Modell Tabelle (in einer normalen Situation).

Sie sollten es wie params[:reasons] mit form_tag

<%= form_tag post_review_path, method: :get, :review_queue_id => @review_queue.id, :status => 'accepted'}) do |f| %> 
    <div class='form-group'> 
    <label for='comment'>Please give a reason? (required)</label> 
    <%= text_area_tag(:reasons, placeholder: 'Your commentns ...', rows: 9, class: 'form-control') %> 
    </div> 
    <div class='modal-footer'> 
    <%= submit_tag 'Approve', class: 'btn btn-success btn-decission btn-modal-left-side' %> 
    <button type='button' class='btn btn-default' data-dismiss='modal'>Close</button> 
    </div> 
<% end %> 

Und in der Steuerung Zugang gehen. Auch wenn Sie bemerkt haben, habe ich method: :get zum form_tag hinzugefügt, wie Sie die Info DB speichern möchten nicht

+1

Danke für die Erklärung @pavan. Ich sehe, dass der Textbereich jetzt durcheinander ist, aber das ist in Ordnung. zumindest sehe ich jetzt die params im controller :) – TheLegend

+0

Würde die form-tag-zeile nicht so aussehen? '<% = form_tag (post_review_review_queue_applications_path (: review_queue_id => @ review_queue.id,: status => 'akzeptiert'), Methode:: get) do | f | %> ' – TheLegend

+0

@TheLegend Sie sollten das Formular an eine Route anhängen, die Sie in den Routen definiert haben. Da Ihre Route 'post_review' ist, wird es' post_review_path' sein. – Pavan

1

Der Schienenhelfer form_for wird für Formulare für Schienenressourcen verwendet. Sie möchten den Helfer form_tag verwenden. Suchen Sie nach form_for und form_tag here für weitere Informationen zu diesen 2 Methoden.

+0

Vielen Dank Knospe! ich habe form_tag nie zuvor benutzt. – TheLegend

Verwandte Themen