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

Best practice for passing :user_id into params for a new object from a nested resource form?

# User model
has_many :forums
has_many :posts

# Forum model
belongs_to :user
has_many :posts

# Post model
belongs_to :user
belongs_to :forum

我有一个嵌套在 forum 中的 post 表单。我想用所需的 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 会更好吗?

有没有我没有看到的更好的方法?

你可以试试

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

您可以使用 build:

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

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

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