我有一个非常简单的用Ruby编写的循环:
params[:category].each do |i|
cat = Category.find(i)
string << cat.name
end
奇怪的问题是它只会经历一次这个循环!
params[:category]
应该是一系列params,都在类别标签下,对吗?
这是使用控制器中的select标签生成的:
<%=select_tag "category", options_from_collection_for_select(@category,"id" , "name"),:multiple => true, :class=>"bbFormSelect",:id=>"select_category", :name => "category" %>
如果你看到了什么错误,请告诉我!
答案 0 :(得分:6)
您可以随时通过手动记录来检查变量的内容:
logger.info(params[:category])
这将适用于所有控制器。
但我建议你以不同的方式去做。根据您的方法,控制器将为所提供的每个类别调用一次数据库。它应该足以将它发送到这样的find方法:
@categories = Category.find(params[:category])
names = @categories.map(&:name).join
如果find方法获取了一个id数组而不仅仅是一个id,它将返回一个类别数组。
答案 1 :(得分:3)
在视图中的某个位置使用<%= debug params[:category] %>
查看已发布的参数的内容。如果循环运行一次,则类别中有一个条目。
除此之外,循环似乎很好(字符串应该在之前初始化,我想你已经没有错误)。
答案 2 :(得分:1)
如果您希望Rails根据输入参数构建一个类别数组,请将输入的名称更改为category [],如下所示:
<%=select_tag "category", options_from_collection_for_select(@category,"id" , "name"),:multiple => true, :class=>"bbFormSelect",:id=>"select_category", :name => "category[]" %>