在Rails中查找不属于Author的帖子

时间:2016-07-02 12:55:12

标签: ruby-on-rails

假设我有一个像这样的帖子模型:

class Post < ActiveRecord::Base
  belongs_to :user
end

用户模型看起来像这样

class User < ActiveRecord::Base
  has_many :posts, dependent: :destroy

  # I have used devise gem for User management
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, 
         :validatable, :authentication_keys => [:login]
end

然后让我们说XYZ使用他们的帐户创建了一个帖子。 如果登录X,我可以通过以下方式清楚地显示他在帖子中的帖子:

current_user.post

但出于某种原因,我还想要一个不属于X的帖子,或者说arbitrary user? 有什么方法我可以采取current_user对象并传递一些方法或类似的东西?

我只是想说我想获得一个帖子,除了特定用户或例如current_user(登录的用户) 感谢

2 个答案:

答案 0 :(得分:0)

  

但出于某种原因,我还想要一个不属于X的帖子,或者让任意用户说出来?

您可以使用范围为以下任何特定用户提取帖子

scope :fetch_by_user, ->(user) { where(user: user }

然后从控制器的任何位置调用它,如下所示:

Post.fetch_by_user(another_user_object)

更新

如果要列出当前用户不是的所有帖子,请添加以下范围:

scope :posts_by_not_current_user, ->(user) { where.not(user: user) }

现在从控制器打电话。

Post.posts_by_not_current_user(current_user)

P.S:范围必须添加到Post模型中。

答案 1 :(得分:0)

好吧,你必须编写一个自定义查询。

Post.where('user_id IN (#{current_user.id}, #{another_user.id})')