【问题标题】:Trying to refer to self inside a has_many scope in rails 5试图在 rails 5 的 has_many 范围内引用 self
【发布时间】:2018-02-12 21:58:07
【问题描述】:

我有以下设置:

class TeamEnrollment < ApplicationRecord
    belongs_to :team
    has_many :term_enrollments, through: :team
end

上面的代码工作正常。现在我需要将 has_many 行更改为如下所示:

has_many :term_enrollments, 
   -> {where("(term_enrollments.term_start_date <= ? AND term_enrollments.term_end_date >= ?) OR (term_enrollments.term_start_date >= ? AND term_enrollments.term_end_date > ?) OR (term_enrollments.term_start_date <= ? AND term_enrollments.term_end_date >= ?)", self.start_date, self.start_date, self.start_date, self.termination_date, self.termination_date, self.termination_date)}
   , through: :team

从上面的代码中,如果我尝试执行TeamEnrollment.first.term_enrollments,则会收到以下错误:

undefined method `start_date' for #<TermEnrollment::ActiveRecord_Relation:0x007ff706550550>

我已经用上面的代码的第一个配置测试了where 子句,它工作正常。只有在 has_many 子句中它不起作用。 我很确定这与在has_many through 中使用 self 有关。我正在尝试参考 TeamEnrollment 的 start_date。我该怎么做呢?

【问题讨论】:

    标签: ruby-on-rails activerecord rails-activerecord ruby-on-rails-5 has-many-through


    【解决方案1】:

    关于作用域的has_many 文档部分显示了以下示例:

    has_many :posts, ->(blog) { where("max_post_length > ?", blog.max_post_length) }
    

    该示例表明scope 可以带一个参数,即调用它的记录

    【讨论】:

      猜你喜欢
      • 2012-02-13
      • 1970-01-01
      • 2016-08-23
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多