除了当前记录之外,让所有姐妹都有记录

时间:2014-01-02 11:47:58

标签: ruby-on-rails activerecord associations

如果用户has_many :posts和帖子belongs_to :user,并且我在一个名为@post的变量中保存了一个特定的帖子,那么最简洁的方式是什么,我可以获得属于的所有帖子与@post相同的用户除了@post本身?

我能带来的最好的是:

@post.user.posts.where('id NOT IN (?)', @post.id)

但这看起来非常冗长。 (三次重复“发布”一词似乎是多余的。)

有更好或更简洁的方法吗?

3 个答案:

答案 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]执行数组减法。