相应于设计文档,尽管我之前已阅读过,但始终可以获得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>
这表示我可以看到查询找到了它需要查找的所有内容。但它实际上不起作用。请帮助我....我在这里死了。
答案 0 :(得分:3)
Post.joins(:postsettings)
.where(postsettings: { user: current_user } )
.where(postsettings: { delete_post: [true, false] })
.joins
会创建INNER JOIN
,这意味着只会返回posts
中postsettings
匹配的行。
答案 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。