ruby-on-rails - 在 Rails 模型中动态生成范围

标签 ruby-on-rails ruby ruby-on-rails-3 rails-activerecord metaprogramming

我想动态生成作用域。假设我有以下模型:

class Product < ActiveRecord::Base
    POSSIBLE_SIZES = [:small, :medium, :large]
    scope :small, where(size: :small) 
    scope :medium, where(size: :medium) 
    scope :large, where(size: :large) 
end

我们可以用基于 POSSIBLE_SIZES 常量的东西替换 scope 调用吗?我认为我违反了 DRY 以重复它们。

最佳答案

你可以做

class Product < ActiveRecord::Base
  [:small, :medium, :large].each do |s|
    scope s, where(size: s) 
  end
end

但我个人更喜欢:

class Product < ActiveRecord::Base
  scope :sized, lambda{|size| where(size: size)}
end

关于ruby-on-rails - 在 Rails 模型中动态生成范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14061595/

相关文章:

ruby-on-rails - 如何让 Rails 将来自 CURL 的参数解析为 JSON 或 XML 而不是字符串?

mysql - 迁移问题

ruby-on-rails - 尝试在 OSX Mountain Lion 上安装 Ruby/Rails

ruby - 在 redis 或 memcached (ruby) 中存储复杂对象

ruby-on-rails-3 - 在端口 80 启动 webrick(mysql2 gem 问题)

ruby-on-rails - Rails 3 App 中的用户可自定义背景

ruby-on-rails - JSON Rails API 的功能测试

ruby-on-rails - 将瘦网络服务器作为 Windows 服务运行

mysql - Rails Arel - 如何使用 MySQL 执行 INTERVAL 1 DAY

ruby - 如何在 Rails App 中集成 Nokogiri