设计不是current_user方法?

时间:2014-10-27 06:13:31

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我是设计新手,我无法找到解决此问题的方法:我希望得到/显示与用户关联的所有帖子用户已登录。

我有以下模型关联:

user.rb

has_many :posts

post.rb

belongs_to :user

我怎么能这样做?我正在寻找以下内容:

- not_current_user.posts.all.each do |post|
  = post.foo
  = post.bar

是否有某种方法或方法可以实现这样的目标?

如果我不清楚或者我碰巧错过了答案,请告诉我。

干杯

4 个答案:

答案 0 :(得分:1)

使用posts = Post.where('user_id != ?', current_user.id)

然后posts.each do ...

答案 1 :(得分:1)

首先,我建议不要在视图中使用这种类型的逻辑。最好在其他地方使用此逻辑,并在视图中呈现posts对象。这将您的视图逻辑与模型和控制器逻辑分离。

要获取与用户无关的帖子,现在您只需查询数据库

即可
# app/controllers/posts_controller.rb
@posts = Posts.where.not(user_id: current_user.id)     # syntax for Rails 4.0+

答案 2 :(得分:1)

可能有这样的事情:

post.rb

scope :all_other_than_created_by_user -> { |user| where(['user_id != ?', user.id]) }

在控制器中:

@posts = Post.all_other_than_created_by_user(current_user)

并在视图中使用它:

- @posts.each do |post|
  = post.foo
  = post.bar

编辑:我把它更改为实际在控制器中进行数据库查询,这比在视图中进行更好。

答案 3 :(得分:1)

我猜你可能意味着:

user.rb has_many :posts post.rb belongs_to :user

你可以试试这个:

@posts = Post.where.not(user_id: current_user.id)

然后在视图中:

- @posts.each do |post|
  = post.foo
  = post.bar