在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?
感谢您的帮助!
答案 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,因此请确保为该动词正确设置路由。