我正在开发一个 Rails 3 应用程序,我的一个 Controller 中有一条线,如下所示:
@features = Feature.find(:all, :conditions => ['featured_at < ?', Time.current], :order => 'featured_at ASC')
@feature = @features.find(params[:feature])
这个想法是从数据库中获取一组“特征”,受一些约束,然后从该集中特别挑选一个。如果有问题的记录存在于数据库中但不符合约束条件,我不想返回它。因此我在做
@features.find
而不是 Feature.find
.我遇到的问题是 View 需要
@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
缺少我需要在 View 中访问的变量/方法?感谢您对此的任何想法。
最佳答案
我建议这样做:
@features = Feature.where('featured_at < ?', Time.now).order('featured_at ASC')
@feature = @features.find(feature_id)
在哪里
feature_id
是要从集合中提取的 id(或 id 列表)。只有第二行会命中数据库。问题是 :all
选项强制方法发送查询并返回一个数组。
关于ruby-on-rails - 查找返回枚举器,而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6397832/