Rails 3选择复选框 - 将列表传递给控制器

时间:2015-03-25 15:12:39

标签: ruby-on-rails

在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'

UPDATE1:

尝试:

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)&#34;

我是否需要添加form_tag和submit_tag?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

尝试更像这样的事情:

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

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