3

我正在开发一个 Rails 3 应用程序,我的一个控制器中有一条线,如下所示:

@features = Feature.find(:all, :conditions => ['featured_at < ?', Time.current], :order => 'featured_at ASC')
@feature = @features.find(params[:feature])

这个想法是从数据库中获取一组“特征”,受到一些限制,然后从该集中特别挑选一个。如果有问题的记录存在于数据库中但不符合约束条件,我不想返回它。因此,我正在做@features.find而不是Feature.find.

我遇到的问题是视图需要@feature.title,这会产生错误:

undefined method 'title' for #<Enumerator:0x0000010216efd8>

当然,我可以通过用这个替换上面的内容来回避这个问题,在这里我只需定义两次约束:

@features = Feature.find(:all, :conditions => ['featured_at < ?', Time.current], :order => 'featured_at ASC')
@feature = Feature.find(params[:feature], :conditions => ['featured_at < ?', Time.current], :order => 'featured_at ASC')

但这似乎不优雅而且有点多余。

最好的解决方案是什么?如何让我的@features.find结果按原样处理Feature,而不是Enumerator缺少我需要在视图中访问的变量/方法?

感谢您对此的任何想法。

4

1 回答 1

1

我建议这样做:

@features = Feature.where('featured_at < ?', Time.now).order('featured_at ASC')
@feature = @features.find(feature_id)

feature_id您要从集合中提取的 id(或 id 列表)在哪里。只有第二行会命中数据库。问题是该:all选项强制该方法发送查询并返回一个数组。

于 2011-06-18T18:04:43.197 回答