【问题标题】:Rails passing params from index pageRails 从索引页面传递参数
【发布时间】:2014-12-11 01:06:49
【问题描述】:

我有一个 Rails 应用程序,我在其中列出了索引页面上的记录。 其中一列是:

<td><%= check_box_tag "event_ids[]", event.id %></td>

我在索引页底部有一个按钮:

<%= link_to 'Submit ', addinvtimes_invtimes_path, :class => 'btn btn-success' %>

我希望这段代码在 invtimes 控制器中运行:

   def addinvtimes
    if params[:event_ids] != nil
      params[:event_ids].each do |i|
        newinvtime = Invtime.new(
            linetype_id: 1,
            invoice_id: @invoice.id,
            event_id: i.to_i
        )
      end
    end
  end

但是,即使选中了几个框,params[:event_ids] 也为零。

您不能使用索引页面提交参数吗?必须是表格吗?

感谢您的帮助!

更新 1

我尝试在调用中传递数组event_ids[]

<%= link_to 'Submit ', addinvtimes_invtimes_path(:workorder_id => @workorder, :event_ids[] => event_ids[]), :class => 'btn btn-success' %>

但是,得到:

wrong number of arguments (0 for 1..2)

我只需要在控制器代码addinvtimes 中访问数组event_ids[]

更新2

我要做的只是列出一堆记录并包含一个复选框列。然后在控制器中获取已检查行的 id 列表。

【问题讨论】:

  • 是的,除非您使用 Javascript 来捕获点击链接的人,否则这些都需要包装在表单中。

标签: ruby-on-rails


【解决方案1】:

页面的类型(索引、新建、编辑等)不会影响提交数据的能力,但是,如果您想使用纯 HTML 将数据发布到 params 哈希中,则需要表单。

更新1:

至于更新,将 :event_ids[] 作为参数添加到链接只会将其作为查询字符串参数添加到链接,并在解析视图时为其分配 event_ids[] 的值。对 html 中复选框的更改不会反映在查询字符串中。我认为,最简单的方法是将复选框和提交包装到一个表单标签中,然后让它将数据发布到您的控制器操作。

哦,我刚刚看到,错误的参数数量错误导致在没有索引的 event_ids 上调用 []。我不确定,但显然你不能在变量名中包含 []。

【讨论】:

  • 谢谢 - 我会尝试使用表单标签
  • 我试过&lt;%= form_tag do %&gt; - 但是,params[:event_ids] 仍然为零。
  • 我得到了它的工作 - 使用&lt;%= simple_form_for :invtime, :url =&gt; url_for(:action =&gt; 'addinvtimes', :controller =&gt; 'invtimes'), :method =&gt; 'post' do |f| %&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多