Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 语法错误,意外'';,期望值=>u、 许可证(角色:[],:电子邮件,:密码,:密码\u确认^_Ruby On Rails_Ruby_Ruby On Rails 4_Devise - Fatal编程技术网

Ruby on rails 语法错误,意外'';,期望值=>u、 许可证(角色:[],:电子邮件,:密码,:密码\u确认^

Ruby on rails 语法错误,意外'';,期望值=>u、 许可证(角色:[],:电子邮件,:密码,:密码\u确认^,ruby-on-rails,ruby,ruby-on-rails-4,devise,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我在我的项目中使用了gem'designe'。这两行代码之间的区别是什么: devise_parameter_sanitizer.for(:sign_up) { |u| u.permit( :email, :password, :password_confirmation, roles: [] ) } 及 因为当我尝试第二个时,我得到了以下错误: syntax error, unexpected ',', expecting => ...| u.permit( roles: [],

我在我的项目中使用了
gem'designe'
。这两行代码之间的区别是什么:

 devise_parameter_sanitizer.for(:sign_up)  { |u| u.permit( :email, :password, :password_confirmation, roles: [] ) }

因为当我尝试第二个时,我得到了以下错误:

syntax error, unexpected ',', expecting => ...| u.permit( roles: [], :email,:password, :password_confirma... ... ^

您不能只切换函数的参数。
不同之处在于,函数需要的是“here”,而您要传递的是“there”。它要的是其他“there”。

Ruby为参数提供了特殊的语法sugar,即散列。您必须最后传递它

这个

基本上就是这个意思

u.permit( :email, :password, :password_confirmation, { roles: [] } )

在第二个示例中,您试图将其作为第一个参数传递,这会混淆ruby解析器。请使用第一种形式。

ruby进行了一些巧妙的解析,以避免在可以通过上下文推断数据结构形状时过度使用方括号和圆括号。在第一种情况下,
角色:[]
位于参数字符串的末尾。可以推断它是一个带有单个键的散列,
:roles
-相当于:
{roles:[]}

在第二种情况下,上下文是不明确的-键:roles可以指向由空数组和一些符号组成的数组:
{roles:[[],:email…]}
,或者它可以只指向空数组:
{roles:[],:email,


因此,这样的构造是不允许的,因此语法错误

这基本上是正确的。现在只需要适当地措辞:)很好知道。我觉得两者都一样:)
u.permit( :email, :password, :password_confirmation, roles: [] )
u.permit( :email, :password, :password_confirmation, { roles: [] } )