簡體   English   中英

Rails form_for將參數發送到控制器動作而不是模型

[英]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: :getform_tag因為您不想將信息保存到數據庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM