ruby - 在事件记录范围内映射

标签 ruby activerecord padrino

我有一个事件记录,其中有一个用例:我想在 ActiveRecord scopes 中使用 map。以下是我的代码:

class SupportedGeoIdAndLocation < ActiveRecord::Base

   scope :supported_geo_ids,            lambda { all.map(&:geo_id).uniq }
   # also tried: scope :supported_geo_ids,            lambda { select('distinct geo_id').map(&:geo_id).uniq }
   scope :locations_for_geo_id, lambda { |geo_id| where(:geo_id => geo_id).map(&:location) }
end

但是当我执行 SupportedGeoIdAndLocation.supported_geo_ids 时,我得到空数组,而 SupportedGeoIdAndLocation.all.map(&:geo_id).uniq 给出了我想要的结果。

我正在寻找一种方法,以便可以使用 lambda 一次完成,而不是通过链接不同的方法并完全避免类函数。

看起来我使用范围的方式不对,请告诉我正确的方法。

版本:padrino:0.10.5,ruby:ruby-1.9.3-p429,ActiveRecord:3.1.6

最佳答案

scope 应返回一个 ActiveRecord::Relation,因此可以将范围与另一个范围或类方法等链接起来。

如果要获取数组,请改用类方法。

def self.supported_geo_ids
  all.map(&:geo_id).uniq
end

关于ruby - 在事件记录范围内映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24201123/

相关文章:

ruby - Datamapper 与多个键有 n 个关系

php - Codeigniter:MySQL Where 子句和引号

ruby-on-rails - 具有来自同一个表的多个 id 的 Rails 关系表

postgresql - 在 padrino 中配置 heroku 数据库连接 - DATABASE_URL 失败

ruby - 在应用程序之间共享过滤器

ruby - 如何通过 Ruby 解压缩受密码保护的文件

ruby-on-rails - 在 js.erb 文件中使用 jquery 渲染部分出现错误。渲染不是一个函数

ruby-on-rails - 未应用 ActiveRecord cache_timestamp_format 配置

ruby - 如何从 Padrino 中的模型访问应用程序设置

ruby-on-rails - Rails 模型范围内的关联数据