我有点困惑这个。我确信这很简单,但我仍然无法理解。
这是我的许可证方法:
def post_params
params.require(:post).permit(:char_id, :text).merge!(topic_id:params[:topic_id], user_id: current_user.id, ip: request.remote_ip)
end
以下是请求路由到的控制器更新方法:
def update
@post.update(post_params)
respond_to do |format|
format.html { redirect to }
format.json { render partial: "post", locals: {post:@post} }
end
end
这是请求附带的the params hash 我需要得到一些like this。
当我看到控制台时,我看到了这一点:
Unpermitted parameters: id, text, char_id, ip, show_text, posted_at, char, editable, deletable, commentable, user
这是错误的还是我错过的东西?
答案 0 :(得分:1)
我相信您已关闭,请尝试修改您的post_params
方法,如下所示:
def post_params
params.permit(:topic_id)
params.require(:post).permit(:text, :char => [:id]).merge({ip: request.remote_ip, user: current_user})
end
最大的区别是我们传递了merge
一个哈希值,但也指定了:char
嵌套在:post
内的我们想要的内容,以及白名单:topic_id
(其中不属于:post
)。
答案 1 :(得分:0)
我认为合并是问题所在。它在错误的地方。
你拥有它的方式是合并作用于
产生的params对象params.require(:post).permit(:char_id, :text)
请改为尝试:
def post_params
params.require(:post).merge(user_id: current_user.id, ip: request.remote_ip)).permit({:char_id, :text, topic_id, :user_id, :ip}
end