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.
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
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
@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