获取ApplicationRecord Model中的当前用户并在has_many中执行查询

时间:2017-12-06 09:29:21

标签: ruby-on-rails

我的模特帖子有很多关系,我想关注的是

has_many :grid_notifications, :dependent=>:destroy

我使用jbuilder将数据返回到Backbone.js图层,所以当我获取帖子时 as_json 方法被调用

  def as_json(opts=nil)
  out={
    ...
    notifications: self.grid_notifications,
    ...
  }
  end

我在jBuilder docs

之后定义了视图

视图/帖/ index.json.jbuilder

json.array! @posts, partial: 'posts/post', as: :post

及相关的部分观点/帖子/ _post.json.jbuilder

json.extract! post, ...other values... , :grid_notifications

通过这种方式,foreach Post它返回所有GridNotifications,无论哪个是当前用户。 因此,我想执行与Post模型相关的查询以返回当前用户而不是所有用户的GridNotifications,因此 has_many 语句变为

has_many :grid_notifications, -> { where user_id: user.id }, :dependent=>:destroy

但是这样我得到以下错误:

显示第1行引发的... / app / views / posts / index.json.jbuilder: 未定义的局部变量或方法`user'对于#

那么,我如何定义 _post.json.jbuilder 或?

1 个答案:

答案 0 :(得分:0)

在模型Post中使用范围

scope :user_grid_notifications, -> (user) { includes(:grid_notifications).where(grid_notifications: {user_id: user.id}) }

然后

notifications: self.user_grid_notifications(current_user)