如果用户has_many :posts
和帖子belongs_to :user
,并且我在一个名为@post
的变量中保存了一个特定的帖子,那么最简洁的方式是什么,我可以获得属于的所有帖子与@post
相同的用户除了@post
本身?
我能带来的最好的是:
@post.user.posts.where('id NOT IN (?)', @post.id)
但这看起来非常冗长。 (三次重复“发布”一词似乎是多余的。)
有更好或更简洁的方法吗?
答案 0 :(得分:2)
由于活动查询结果可以作为可枚举的方式返回,因此您可以使用可枚举方法“ - ”代替:
class Post < ActiveRecord::Base
[...]
def other_posts
user.posts - [self]
end
[...]
end
然后你可以拨打@post.other_posts
!
答案 1 :(得分:1)
您可以创建一个运行此查询的方法
Post.where(user_id: @post.user_id).where.not(id: @post.id)
答案 2 :(得分:0)
您可以尝试使用此
post_result = @post.user.posts - [@post]
背景:@ post.user.posts是内存中的数组,只要你不作为关系访问它。[@ post]是一个只有元素的数组,你要删除(在内存中) 。 @ post.user.posts - [@post]执行数组减法。