将 :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_id
和 user_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)
# 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_id
和 user_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)