ruby-on-rails - 混合 ActiveRecord 查找条件

标签 ruby-on-rails ruby activerecord

我想根据 created_on >= some date AND name IN some list of names 的组合查找记录。

对于“>=”,我必须使用 sql 条件。对于“IN”,我必须使用条件散列,其中键是 :name,值是名称数组。

有没有办法将两者结合起来?

最佳答案

您可以在 rails 2.1 及更高版本中使用命名作用域

Class Test < ActiveRecord::Base
  named_scope :created_after_2005, :conditions => "created_on > 2005-01-01"
  named_scope :named_fred, :conditions => { :name => "fred"}
end

那么你可以做

Test.created_after_2005.named_fred

或者你可以给 named_scope 一个 lambda 来允许你传入参数

Class Test < ActiveRecord::Base
  named_scope :created_after, lambda { |date| {:conditions => ["created_on > ?", date]} }
  named_scope :named, lambda { |name| {:conditions => {:name => name}} }
end

那么你可以做

Test.created_after(Time.now-1.year).named("fred")

关于ruby-on-rails - 混合 ActiveRecord 查找条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/83674/

相关文章:

ruby-on-rails - 使用参数查找失败的 Sidekiq 作业列表

ruby-on-rails - Ruby 将实例变量标记为不可分配

ruby - 优化用于将字符串解析为数值的 ruby​​ 代码

JavaScript 无法在 Rails 中运行

mysql - Yii2:防止 ActiveRecord 属性中的空字符串

ruby-on-rails - 使用带有 Ruby 1.9.3-p125 的 ActionMailer 的段错误

javascript - js : undefined local variable or method `current_user'

ruby - 指定 TLSv1 时 SSLv3 证书验证失败?

ruby-on-rails - Rails/Activerecord 数据库字段时区

ruby-on-rails - 使用 Rails 序列化将散列保存到数据库