将user_id传递给嵌套资源表单中新对象的params的最佳实践?

时间:2016-11-02 06:13:16

标签: ruby-on-rails ruby ruby-on-rails-5

# User model
has_many :forums
has_many :posts

# Forum model
belongs_to :user
has_many :posts

# Post model
belongs_to :user
belongs_to :forum

我的post表单嵌套在forum中。我想使用所需的forum_iduser_id初始化表单,以便最后可以正确保存。

这是我的(失败)尝试。

# posts_controller
def new
  @post = current_user.forums.find(params[:forum_id]).posts.new
end

这就是@post得到的结果:

# @post
#<Post id: nil, title: nil, description: nil, user_id: nil, forum_id: 1, created_at: nil, updated_at: nil>

也许我根本没有这样做。我想找到最好的做法,或者只是一种比强迫事情更好的选择。

user_id一直带到表单中直到它的创建会更好吗?

有没有更好的方式让我看不到?

3 个答案:

答案 0 :(得分:1)

您可以使用build

@post = Forum.find(params[:forum_id]).posts.build

答案 1 :(得分:0)

你可以尝试

@post = Post.new(user_id: current_user.id, forum_id: params[:forum_id])

答案 2 :(得分:0)

您必须单独设置user_id,因为它不会由forum.posts.new设置

forum = current_user.forums.find(params[:forum_id])
@post = forum.posts.new(user_id: current_user.id)