我有Ruby On Rails应用程序。我在我的CommentsController
中创建了方法,我希望始终自动将值分配给其中一个允许的字段(在我的例子中为:commenter)“
class CommentsController < ApplicationController
def create
@meme = Meme.find(params[:meme_id])
@comment = @meme.comments.create(comment_params)
redirect_to meme_path(@meme)
end
private
def comment_params
params.require(:comment).permit(:commenter, :body)
end
end
我怎样才能做到这一点?
答案 0 :(得分:3)
将它与comment_params一起合并,你可以在第二个哈希中添加你想要的更多参数作为键和值
def comment_params
params.require(:comment).permit(:body).merge!({commenter: 'default_value'})
end
答案 1 :(得分:2)
首先,您应该对用户进行身份验证。由于当前用户已通过身份验证,因此无需在参数中传递给他。你可以这样做:
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
@meme = Meme.find(params[:meme_id])
@comment = @meme.comments.create(comment_params)
redirect_to meme_path(@meme)
end
private
def comment_params
params.require(:comment).permit(:body).merge(commenter: current_user)
end
end
答案 2 :(得分:2)
您可以使用tap
:
def comment_params
params.require(:comment).permit(:commenter, :body).tap do |comment|
comment[:commenter] = "some value here"
comment[:any_other_key] = "some other value"
end
end
答案 3 :(得分:1)
您可以在迁移中添加t.string :commenter, default: "default_commenter"
吗?这样,如果您正在使用控制台,那么您将不会得到空值。它还将清理控制器代码。