ruby中的每个循环都不起作用

时间:2011-04-08 01:29:41

标签: ruby-on-rails ruby

我有一个非常简单的用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" %>

如果你看到了什么错误,请告诉我!

3 个答案:

答案 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[]" %>