ruby-on-rails - 具有多个条件的 Rails 4 范围

标签 ruby-on-rails ruby-on-rails-4 activerecord scope

我想在 1 天内显示活跃用户。

成员模型和范围:

time_range = (Time.now - 1.day)..Time.now
scope :active, -> { where(created_at: time_range, gold_member: true, registered: true) }

但是,当我调用

@member = User.active

呈现以下错误:

NoMethodError: undefined method `call' for #<User::ActiveRecord_Relation:0x07fe068>

请指教。

回溯:

  from /Users/jason/.rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/activerecord-4.1.7/lib/active_record/relation/delegation.rb:136:in `method_missing'
  from /Users/jason/.rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/activerecord-4.1.7/lib/active_record/relation/delegation.rb:99:in `method_missing'
  from /Users/jason/.rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/activerecord-4.1.7/lib/active_record/scoping/named.rb:151:in `block (2 levels) in scope'
  from /Users/jason/.rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/activerecord-4.1.7/lib/active_record/relation.rb:292:in `scoping'
  from /Users/jason/.rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/activerecord-4.1.7/lib/active_record/scoping/named.rb:151:in `block in scope'
  from (irb):48
  from /Users/jason/.rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/railties-4.1.7/lib/rails/commands/console.rb:90:in `start'
  from /Users/jason/.rbenv/versions/2.1.4/lib/ruby/gems/2.1.0/gems/railties-4.1.7/lib/rails/commands/console.rb:9:in `start'

最佳答案

它不会修复您的错误,但您定义范围的方式存在问题。在你这样做之前,你定义局部变量 time_range。但问题是,您在 ActiveRecord 类的主体中定义了它,因此它只会在生产环境中被评估一次,即类被加载时。您应该在 lambda 中评估您的时间范围:

scope :active, -> {
  where(created_at: (Time.now - 1.day)..Time.now, gold_member: true, registered: true)
}

关于ruby-on-rails - 具有多个条件的 Rails 4 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27499712/

相关文章:

ruby-on-rails - 在 Passenger 的子目录中部署 Rails 应用程序

javascript - JVector 交互式 map 不在 Rails 3 中呈现

ruby-on-rails - 在 Rails 环境下使用 Rspec 测试 Rake 任务

ruby - 基于用户定义的输入构建动态 if 语句

ruby-on-rails - 无法创建新的 Spree 应用程序 : "undefined method ` raise_in_transactional_callbacks ='"

ruby-on-rails - 2个大小写不同的字符串数组的交集

javascript - 错误 : It isn't possible to write into a document from an asynchronously-loaded external script

ruby-on-rails - 使用 POST/sign_in 登录。不支持 GET。 Omniauth-facebook

ruby-on-rails - 如何查询 Ruby 数组,就像使用 Rails ActiveRecord 一样?

ruby-on-rails - ruby on Rails 如何检查特定属性是否有效