ruby-on-rails - 查找返回枚举器,而不是对象

标签 ruby-on-rails ruby-on-rails-3 activerecord find enumerator

我正在开发一个 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/

相关文章:

javascript - 潜在的 Git/Rails 灾难 : Web page no longer loading

ruby-on-rails - rails 如何渲染具有正确文件名的文件

html - Wicked pdf 不渲染页眉/页脚

ruby-on-rails - Gem 在 Windows 中通过批处理脚本安装 Bundler - 进程被杀死?

ruby-on-rails - DelayedJob 有时无法加载具有命名空间的作业类

ruby-on-rails-3 - 预加载与复杂查询的关联

ruby-on-rails - Rails ActiveRecord : Select Posts WITHOUT comments

ruby-on-rails - 为相关数据库创建Rails下拉列表

ruby-on-rails - 表之间的外键交叉引用

ruby-on-rails - 在Rails3中覆盖到/(根)的资源路由: not changing the path helper?