【问题标题】:Issue with scope while upgrade in rails4.2.6 from 4.1.9从 4.1.9 升级 rails4.2.6 时范围问题
【发布时间】:2016-07-12 07:08:45
【问题描述】:

rails4.1.9 升级到 4.2.6 期间 Rail 4.2.6 中的问题=>

我正在尝试从 id 与parent_id 相同的表中查找这些记录。 所以我写了一个范围

scope :parent_record, ->{ where(parent_id: self[:id]) } 

当我使用这个范围和计算时

  self.all.parent_record

它返回"# ActiveRecord::Relation []>"

在 rails 4.1.9 中它返回 -

#ActiveRecord::Relation [#Category id: 6, name: "Business Disruption", description: "", parent_id: 6, status: "a", target_risk: nil, lock_target_risk: false].

Ruby 版本 - ruby​​-2.0.0-p598

我哪里错了?

【问题讨论】:

  • 你可以试试scope :parent_record, ->{ where(parent_id: self.id) }
  • 已经尝试过了并抛出错误 -*** NoMethodError Exception: undefined method `id' for #<0x0000000919ae98>

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 ruby-2.0


【解决方案1】:

我真的很惊讶这在 Rails 4.1.9 中起作用。因为self 将返回类而不是作用域上下文中的单个实例。因此self[:id] 没有任何意义。

我会写这样的东西来查找所有parent_id 匹配他们自己的id 的记录:

scope :own_parent, -> { where('id = parent_id') }

【讨论】:

  • 我已经作为范围:parent_record,->{ where("#{table_name}.id = #{table_name}.parent_id"]) }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-18
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多