在ActiveRecord中,我们可以使用has_many
关联来建立模型之间的关系。如果我们想要限制一个模型的has_many
关联只能选择另一个模型的has_many
关联,可以使用scope
方法结合where
条件来实现。
下面是一个示例,假设我们有两个模型,User和Post。User可以有多个Post,而Post也可以有多个Post。我们想要限制User的Posts只能选择那些有评论的Posts。
class User < ActiveRecord::Base
has_many :posts
has_many :commented_posts, -> { joins(:comments).distinct }, through: :comments, source: :post
end
class Post < ActiveRecord::Base
has_many :comments
has_many :users, through: :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user
end
在上面的例子中,我们定义了一个名为commented_posts
的关联,它通过comments
表连接了User和Post模型,并通过source
选项指定了关联的模型是Post。我们使用joins(:comments).distinct
来确保只选择那些有评论的Posts。
现在,我们可以通过user.commented_posts
来获取用户的评论过的Posts。
user = User.first
commented_posts = user.commented_posts
这样,我们就限制了User的Posts只能选择那些有评论的Posts。