繁体   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