[英]Rails form_for sending params to controller action and not model
在控制器review_queue
我有一個自定義操作,該操作將結果發布到目標URL,我想為此操作構建一個表單。 我不會將任何字段保存到數據庫,而只是將它們以參數形式傳遞給post_review
動作。
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
在我看來,我有一個將要填寫的表單,並且在提交時應該發送提交表單的原因,我正在設置review_queue_id
和表單中的status
,因為它們是靜態的,但是原因應該來自文本區域
<%= 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 %>
錯誤信息:
NoMethodError - undefined method `reasons' for #<ReviewQueueApplication:0x007fa7ff7832d8>:
似乎Rails在這里假設MVC架構,並假設我想將原因傳遞給review_queue
模型。 沒有原因列,因此它刪除了無方法錯誤。 有沒有一種方法可以指定表單是“臨時的”並且僅到達控制器?
這似乎應該是一件簡單的事情,但是這里發生了一些Rails魔術。
rails幫助程序form_for用於Rails資源的表單。 您要使用form_tag幫助器。 在此處搜索form_for和form_tag以獲取有關這兩種方法的更多信息。
NoMethodError-ReviewQueueApplication的未定義方法“原因”:0x007fa7ff7832d8
form_for
假定您正在為模型對象創建一個表單,並希望這些字段出現在該特定模型的表中 ( 通常情況下 )。
您應該使用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 %>
在控制器中訪問它就像params[:reasons]
。 另外,如果您注意到了,我添加了method: :get
到form_tag
因為您不想將信息保存到數據庫
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.