Ruby on rails 拆分一个数字列表并分别循环

Ruby on rails 拆分一个数字列表并分别循环,ruby-on-rails,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.t

我有一个引用记录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}"

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

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

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

我将这样写,因为在单个数据库中获取多个记录比在多个数据库中获取多个记录更有效

- @otherresource = '1,2,3'
- Resource.where(id: @otherresource.split(',')).each do |res|
  %li- link_to #{res.title}, "/resources/#{res.resourcetype}/#{res.title}"
上面的查询使用一个查询,而不是示例中的三个查询


HTH

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

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}"

顺便说一句,在这种关系中使用关联可能是个好主意。有关详细信息,请参阅。

这是错误的:
“id='s'”
因为您需要所有数据,所以应该在控制器中进行一次查询,并用ruby对对象进行排序。备用数据库呼叫!这是最好的答案,IMHO:)谢谢,这只做了一些小的调整:
-Resource.where(id:@otherresource.split(',')。每个do | res |%li=link_到“#{res.title}”,/resources/#{res resourcetype}/#{res res title}”