看起来您的关联设置不正确:
尝试:
# Post model associations
has_many :comments
has_many :post_users
has_many :users, through: :post_users
# Comment model associations
belongs_to :post
belongs_to :user
# User model associations
has_many :post_users
has_many :posts, through: :post_users
has_many :comments
# PostUser model associations
belongs_to :user
belongs_to :post,
现在在您的 Post 控制器中,您可以执行以下操作:
def new
@post = Post.new
end
def create
@post = Post.new(params[:post])
if @post.save
current_user.posts << @post
redirect_to :show
else
render :new
end
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update_attributes(params[:post])
current_user.posts << @post unless current_user.posts.include(@post)
redirect_to :show
else
render :new
end
end
试试看。你应该能够在你的 Comments 控制器中实现类似的东西来获得你需要的东西。
更新:
为了稍微干点事情,为什么不在 Post 模型上定义一个方法(以及在评论模型中类似的东西)来处理创建用户关联?
def add_user(user)
self.users << user unless users.include(user)
end
然后你可以在需要的地方每次在控制器中调用它:
@post.add_user(current_user)
替换这个:
current_user.posts << @post unless current_user.posts.include(@post)