【发布时间】:2016-04-09 12:17:47
【问题描述】:
在控制器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,因为它们是静态的,但原因应该来自textarea
<%= 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 模型。没有原因列,因此它删除了无方法错误。有没有办法指定表单是“临时的”并且只能到达控制器?
这似乎应该是一件简单的事情,但这里发生了一些轨道魔法。
【问题讨论】:
标签: ruby-on-rails ruby model-view-controller