ruby-on-rails - 尝试在 Rails 5 的 has_many 范围内引用 self

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

我有以下设置:

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 可以采用一个参数,即调用它的记录

关于ruby-on-rails - 尝试在 Rails 5 的 has_many 范围内引用 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040839/

相关文章:

ruby-on-rails - 未定义方法 `each' 为 nil :NilClass - Rails

ruby-on-rails - AWS Cloud 9 上的 Rails 和 Postgresql : role "ec2-user" does not exist

ruby-on-rails - 验证其中一个

ruby-on-rails - 如果 after_initialize 回调返回 false,则返回 nil 对象

ruby-on-rails - 如何在不下载文件的情况下使用其 URL 检查文件是否存在?

ruby-on-rails - 使变量在整个应用程序中可用?

ruby-on-rails - 在 Rails 中如何使用事件记录 `where` 的模型方法?

ruby-on-rails - ActiveRecord::NoDatabaseError:具有ID的本地用户不存在

mysql - Controller 中的 Rails where 或子句

ruby-on-rails - 什么 ActiveRecord 查询将返回具有所有给定的 has_many 关系集的所有记录?