Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 Rails 4应允许的未经许可的参数_Ruby On Rails 4_Strong Parameters - Fatal编程技术网

Ruby on rails 4 Rails 4应允许的未经许可的参数

Ruby on rails 4 Rails 4应允许的未经许可的参数,ruby-on-rails-4,strong-parameters,Ruby On Rails 4,Strong Parameters,我有点受不了这个。我相信这很简单,但我还是搞不懂 以下是我的许可方法: 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) re

我有点受不了这个。我相信这很简单,但我还是搞不懂

以下是我的许可方法:

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
这是请求随附的信息。
我需要买点东西

但当我在控制台中查看时,我仍然看到:

Unpermitted parameters: id, text, char_id, ip, show_text, posted_at, char, editable, deletable, commentable, user

是工作出了问题还是我错过了什么?

我认为合并是个问题。它放错地方了

合并的方式是作用于由

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

我相信您已经接近了,请尝试修改您的
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

最大的区别在于我们传递了
合并
一个散列,但也指定了我们想要从
:char
中得到什么,它嵌套在
:post
中,以及白名单
:topic_id
(它不是
:post
的一部分)。

您能发布完整的代码,并包含提交的参数的完整日志吗?还有,您希望发生什么,因为那个permit方法非常迟钝。我已经将一个要点与我得到的完整参数散列相链接。@sevensacat我已经用controller方法代码更新了这个问题。如你所见,这很简单。如果很简单,我就不会问你更多的信息了。我仍然不知道您希望从许可证方法中得到什么。更新了另一个要点。尝试将合并放在许可证之前,但不起作用。我也试着把他们分开,但也没用。谢谢,成功了。除了我真的不需要那种
:char
嵌套。我确实需要
:char\u id
,如果
:char\u id
:post
中,那么它显然就在
post
的内部,你应该能够用
:char\u id
替换
:char=>[:id]
,并且都设置好了。