1

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

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

4

3 回答 3

1

我会这样写,因为在单个 VS 多个数据库行程中获取多条记录更有效。

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

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

高温高压

于 2013-04-09T14:36:12.183 回答
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

于 2013-04-09T14:40:04.757 回答
0

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

 :conditions => ["id = '" + s + "'"]
于 2013-04-09T14:33:04.743 回答