查询关于当前用户的子模型的父模型

时间:2017-04-15 15:53:37

标签: ruby-on-rails devise

相应于设计文档,尽管我之前已阅读过,但始终可以获得current_user的相关记录。例如:current_user.comments current_user.profile_images

我真正的错误是:

Post.rb

class Post < ApplicationRecord

    belongs_to :user

    has_many :postsettings, inverse_of: :post

    accepts_nested_attributes_for :postsettings

User.rb

class User < ApplicationRecord

has_many :posts
has_many :postsettings

Postsettings.rb

class Postsetting < ApplicationRecord
    belongs_to :post, required: false
    belongs_to :user, required: false

在Posts控制器中,我有这个:

@post_delete = current_user.postsettings.includes(:postsettings).where.not
(postsettings: {user_id: current_user.id, delete_post: false})

哪个有效,但是没有产生预期的结果,因为我需要查询current_user.POSTSETTINGS.delete_post为true或false的所有帖子。

所以我现在已经在这几天了,我设法提出了这个:

@post_delete = Post.includes(current_user.postsettings).where(
postsettings: {user_id: current_user.id, delete_post: false})

这会产生一条我以前从未见过的错误信息。

 ActiveRecord::ConfigurationError in Posts#index
#<Postindex id: 284, read: nil, 
created_at: "2017-04-15 11:38:02", 
updated_at: "2017-04-15 11:38:02", post_id: 96, user_id: 1,
delete_post: false>

这表示我可以看到查询找到了它需要查找的所有内容。但它实际上不起作用。请帮助我....我在这里死了。

2 个答案:

答案 0 :(得分:3)

Post.joins(:postsettings)
    .where(postsettings: { user: current_user } )
    .where(postsettings: { delete_post: [true, false] })

.joins会创建INNER JOIN,这意味着只会返回postspostsettings匹配的行。

答案 1 :(得分:2)

max提供的答案很好,但为方便起见,您可以按如下方式设置用户模型。将此行添加到您的用户模型。

has_many :posts_with_settings, through: :postsettings, source: :post

现在,您应该可以致电current_user.posts_with_settings,为postsettings设置current_user的所有帖子。从那里你可以根据需要过滤,例如,

current_user.posts_with_settings.where(postsettings: {delete_post: true})

有关以下内容的详细信息:通过选项,请参阅here