【问题标题】:Rails 4 scope with multiple conditions具有多个条件的 Rails 4 范围
【发布时间】:2015-02-14 11:22:19
【问题描述】:

我想在 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'

【问题讨论】:

  • 这个错误回溯是什么?
  • 你的控制台输出是什么?
  • 问题已解决,谢谢。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多