【问题标题】:Rails 3 select checkboxes - pass list to controllerRails 3 选择复选框 - 将列表传递给控制器
【发布时间】:2015-05-29 08:25:39
【问题描述】:

在 Rails 3 项目中,我有一个 costprojects 的索引列表。

我有一个名为“viewprojects”的控制器操作。

我想在索引列表中添加一个复选框列。然后让用户选择哪些项目应该包含在 pdf 中。

索引:

<% @costprojects.each do |costproject| %>
  <tr>
    <td><%= check_box_tag "costproject_ids[]", costproject.id %></td>
...
<%= link_to 'PDF Selected', costprojects_viewprojects_path(:format => "pdf",:costproject_ids => costproject_ids[] ), :class => 'btn btn-success', :target => "_blank" %>

控制器:

 def viewprojects
    @costprojects = params[:costproject_ids]
    respond_to do |format|
      format.html
      format.pdf do
        render  :pdf => "costprojects.pdf",
                :show_as_html => params[:debug].present?,
                :page_size  => 'letter'
      end
    end
  end

我明白了:

undefined local variable or method `costproject_ids'

更新1:

试过了:

def viewprojects
 @costprojects = params[:costproject_ids[]]
...

<%= link_to 'PDF Selected', costprojects_viewprojects_path(:format => "pdf",:costproject_ids[] => costproject_ids[] ), :class => 'btn btn-success', :target => "_blank" %>

我得到“错误数量的参数(0 代表 1..2)”

需要添加form_tag和submit_tag吗?

感谢您的帮助!

【问题讨论】:

  • params['costproject_ids[]'] 试试?
  • 我把link_to和控制器改成了:costproject_ids[],得到了wrong number of arguments (0 for 1..2)
  • 为什么你使用link_to,你可以使用表单提交输入?

标签: ruby-on-rails


【解决方案1】:

正如传奇在 cmets 中提到的,您需要将其包装在一个表格中。 link_to 不会传输所选 id 的值,除非它包含在其查询参数中,在渲染时它无法知道。

试试这样的:

<%= form_tag costprojects_viewprojects_path(format: "pdf") do %>
  <% @costprojects.each do |costproject| %>
    <tr>
      <td><%= check_box_tag "costproject_ids[]", costproject.id %>    
    </td>
  <% end %>
  ...
  <%= submit_tag "PDF Selected", class: "btn btn-success" %>
<% end %>

然后您应该能够在控制器中使用params[:cost_project_ids] 访问cost_project_ids 的数组,看来您已经在这样做了。请注意,这将发送 HTTP POST,而不是 GET,因此请确保为该动词正确设置了路由。

【讨论】:

  • 谢谢!我将如何设置路线?我收到No route matches [POST] "/costprojects/viewproject.pdf"
  • @Reddirt 我不知道你的路由文件是如何设置的,但如果你不使用资源或类似的东西,那么你应该可以简单地执行post "/costprojects/viewprojects", to: "costprojects#viewprojects 之类的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 2012-12-31
  • 1970-01-01
  • 2023-03-25
  • 2016-01-31
  • 1970-01-01
相关资源
最近更新 更多