我正在开发一个Rails 3应用程序,我的控制器中有一行显示如下:
@features = Feature.find(:all, :conditions => ['featured_at < ?', Time.current], :order => 'featured_at ASC')
@feature = @features.find(params[:feature])
我们的想法是从数据库中获取一组“功能”,但要受到一些限制,然后从该组中特别挑出一个。如果有问题的记录存在于DB中但不符合约束,我不想返回它。因此,我正在@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
?
感谢您对此的任何想法。
答案 0 :(得分:1)
我建议:
@features = Feature.where('featured_at < ?', Time.now).order('featured_at ASC')
@feature = @features.find(feature_id)
其中feature_id
是要从集合中提取的id(或id列表)。只有第二行会命中数据库。问题是:all
选项强制该方法发送查询并返回一个数组。