Ruby on rails 有没有办法使用AREL进行自定义关联?

Ruby on rails 有没有办法使用AREL进行自定义关联?,ruby-on-rails,ruby,activerecord,associations,arel,Ruby On Rails,Ruby,Activerecord,Associations,Arel,有没有任何方法可以使用AREL或其他更精简的语法,像命名范围一样优雅地定义自定义关联 更新 我已经决定,无论如何,将这种细节放入关联中都不是一个好主意,因为关联应该总是/主要定义模型之间的基本关系。也许有更好的方法,但我知道,通过使用Arel的功能,可以在关联中使用实际条件(而不是s) 您会注意到,实际的Arel代码并不像ActiveRecord关系那样精简 我确实在Rails主分支中找到了将传递Arel谓词作为条件的代码,但该代码似乎不在3.0分支中。至少我找不到。解决方案之一是在评论上添加垃

有没有任何方法可以使用AREL或其他更精简的语法,像命名范围一样优雅地定义自定义关联

更新


我已经决定,无论如何,将这种细节放入关联中都不是一个好主意,因为关联应该总是/主要定义模型之间的基本关系。

也许有更好的方法,但我知道,通过使用Arel的功能,可以在关联中使用实际条件(而不是s)

您会注意到,实际的Arel代码并不像ActiveRecord关系那样精简


我确实在Rails主分支中找到了将传递Arel谓词作为条件的代码,但该代码似乎不在3.0分支中。至少我找不到。

解决方案之一是在评论上添加垃圾邮件:

has_many :spam_comments, :class_name => 'Comment', :conditions => Comment.arel_table[:spammy].eq(true).to_sql
就模型职责而言,这看起来有点干净。就性能而言,完全相同:

model Post
  has_many :comments

  scope :with_comments, joins(:comments)
end

model Comment
  scope :spammy, where(:spammy => true)
end

附加好处:您可以从任何其他关联中获得垃圾评论。

是的,我看到了……我认为称之为“关联”并不好,因为它没有定义两个模型之间的关系。从性能角度看,这是否与通过关联限制查询具有相同的效果?(这里是初学者)
model Post
  has_many :comments

  scope :with_comments, joins(:comments)
end

model Comment
  scope :spammy, where(:spammy => true)
end
p.comments.spammy.to_sql
# → SELECT "comments".* FROM "comments"
#   WHERE ("comments".post_id = 2) AND ("comments"."spammy" = "t")