拆分数字列表并单独循环

时间:2013-04-09 14:27:59

标签: ruby-on-rails

我有一个引用记录的id的数字列表,我需要遍历列表,并显示每个资源的标题和链接。我目前有这个:

- @otherresource = "1,2,3"

- @otherresource.split(",").each do |s|
  - Resource.find(:all, :conditions => ["id = 's'"]).each do |p|
    %li= link_to "#{ p.title }", "/resources/#{p.resourcetype}/#{p.title}"

但这仅显示列表中的第一个然后停止。它不会遍历每个数字。

3 个答案:

答案 0 :(得分:1)

我写这个如下,因为在单个VS多个数据库中获取多个记录更有效率。

- @otherresource = '1,2,3'
- Resource.where(id: @otherresource.split(',')).each do |res|
  %li- link_to #{res.title}, "/resources/#{res.resourcetype}/#{res.title}"

上述查询使用单个查询,而不是示例中的三个查询。

HTH

答案 1 :(得分:1)

您的控制器应负责从数据库中获取资源:

def action
  @otherresource = "1,2,3"
  ids = @otherresource.split ","
  @resources = Resource.where(id: ids) # fetch all resources at once
end

然后在你看来:

- @resources.each do |p|
  %li= link_to "#{ p.title }", "/resources/#{p.resourcetype}/#{p.title}"
顺便说一句,对于这种关系使用关联可能是个好主意。有关详细信息,请参阅http://guides.rubyonrails.org/association_basics.html

答案 2 :(得分:0)

您没有检查id是否等于s变量。您正在检查id是否等于“s”字符。 正确的条件应该是:

 :conditions => ["id = '" + s + "'"]