Rails form_for将params发送到控制器动作而不是模型

时间:2016-04-09 12:17:47

标签: ruby-on-rails ruby model-view-controller

在控制器HomePage.prototype.getFile = function() { var filePath = fs.path.join(fs.knownFolders.currentApp().path, "myFile.txt"); storage.createDirectory("myNewDir"); httpModule.getFile({ url: "https://content.dropboxapi.com/2/files/download", method: "POST", headers: { "Content-Type": "", "Dropbox-API-Arg": JSON.stringify({"path": "/path/file"}), "Authorization": "*****" }, }, storage.buildAbsolutePath()+"/myNewDir").then(function (response) { console.log(JSON.stringify(response)); }, function (e) { console.log("Error occurred " + e); });} 中,我有一个将结果发布到目标网址的自定义操作,我想为此操作构建一个表单。我不打算将任何字段保存到DB中我只是将它们传递给review_queue动作的参数。

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,因为这些是静态的,但原因应该来自textarea

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 %>

似乎rails在这里假设MVC架构,并假设我想将原因传递给NoMethodError - undefined method `reasons' for #<ReviewQueueApplication:0x007fa7ff7832d8>: 模型。没有原因列,所以它删除了no方法错误。有没有办法指明表格是“临时的”&#39;并且只到控制器?

这似乎应该是一件简单的事情,但这里有一些铁轨魔术。

2 个答案:

答案 0 :(得分:1)

rails helper form_for用于rails资源的表单。您想使用form_tag帮助器。搜索form_for和form_tag here以获取有关这两种方法的更多信息。

答案 1 :(得分:1)

  

NoMethodError - 未定义的方法`reason'   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,因为您不想将信息保存到 数据库