[英]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.