试图在 rails 中的 has_many 范围内引用 self 5
Trying to refer to self inside a has_many scope in rails 5
我有以下设置:
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。我该怎么做呢?
有关范围的 has_many
文档部分显示了以下示例:
has_many :posts, ->(blog) { where("max_post_length > ?", blog.max_post_length) }
该示例表明 scope
可以采用一个参数,即调用它的记录
我有以下设置:
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。我该怎么做呢?
有关范围的 has_many
文档部分显示了以下示例:
has_many :posts, ->(blog) { where("max_post_length > ?", blog.max_post_length) }
该示例表明 scope
可以采用一个参数,即调用它的记录