【问题标题】:Convert Rails 4 has_many from condition with proc to where将 Rails 4 has_many 从带有 proc 的条件转换为 where
【发布时间】:2013-10-09 17:57:48
【问题描述】:

我有以下工作 has_many 与 proc 来捕获上下文参数:

has_many :subclass_point_analytics, :conditions =>  proc {"assessment_id = #{self.send(:assessment_id)}" }, :foreign_key => 'gid',  :dependent => :destroy

我正在使用 Rails 4,它(理所当然地)抱怨使用 :conditions。经过 30 分钟和多次尝试后,我无法弄清楚如何将 :conditions 转换为 -> { where ... } 格式。我会很感激有 proc 语法知识的人来帮助我纠正错误。

【问题讨论】:

  • 您找到解决问题的方法了吗?

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


【解决方案1】:

这样做:

has_many :subclass_point_analytics, -> (object) { where("assessment_id = ?", object.assessment_id) }, :foreign_key => 'gid',  :dependent => :destroy

object 是您的实际实例。 另外,请注意:可调用对象必须是第一件事(:条件往往在最后)

【讨论】:

  • 非常适合我。还建议将“对象”变量重命名为更多域特定名称。
  • 只是想补充一点,我在“必要”的地方一遍又一遍地使用它,它就像一个魅力。感谢@Thomas 的回答。
  • 如何在 rails 3.2 中做到这一点?
【解决方案2】:

我会从这样的开始:

has_many :subclass_point_analytics, -> { where("assessment_id = #{self.send(:assessment_id)}") }, :foreign_key => 'gid',  :dependent => :destroy

【讨论】:

  • 这也是我开始的地方,但由于缺少 proc 元素,它不起作用。我的问题是如何在转换过程中保留 proc 元素。
  • Proc 甚至是必要的,这似乎很奇怪。 subclass_point_analytics 是否有可能属于同一个模型但有多个assessment_id?如果是这样,那么您将如何通过关联检索它们?似乎完全放弃条件应该没问题。
  • 它不可能有多个评估,但条件被用作评估_id 领先于主键,并且是分区键的一部分。没有它的性能差异是数据集大小的 1000 倍。
猜你喜欢
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多