2016-08-12 53 views
0

简单的博客应用程序/ nobrainer宝石导轨5和RethinkDB错误存储数据在轨道/ Rethinkdb

模型

class Post 
include NoBrainer::Document 
include NoBrainer::Document::Timestamps 
field :title, :type => String 
field :body, :type => Text 

控制器

def post_params 
    params.require(:post).permit(:title, :body) 
end 

正常工作与导轨4相同的在导轨5错误:

一些想法??

To assign attributes, please pass a hash instead of `ActionController::Parameters' 

回答

0

这是一个问题与NoBrainer。它已在当前的git HEAD版本中得到修复,并将包含在下一个更新版本中。

不要简单地通过将post_params转换为散列,像前面建议的那样绕过强参数;这将允许任何用户提交他们希望的任何表单字段,并且您的应用程序将盲目地接受它。这是一个巨大的安全问题,因为任何攻击者现在都可以传递任意列数据(例如,“is_admin = 1”),并且您的应用将毫不犹豫地接受它们。

如果您曾经将参数转换为哈希值,那么您做出了错误的决定。你永远不应该从控制器传递原始参数到模型中。强有力的参数是为了保护你。如果permitrequire白名单不起作用,则Rails或您的ORM被破坏。停下来,找出哪一个坏了,并将其报告给适当的项目。

+0

Thanks..for修复.. – Werner

0

根据你的错误信息To assign attributes, please pass a hash instead of 'ActionController::Parameters'我假设某处你的应用程序有一个代码:

Post.create(post_params) 

转换成散列与to_h方法:

Post.create(post_params.to_h) 
+0

非常感谢.. .. – Werner

+0

Nooo!虽然这“解决”了问题,但它使“强参数”完全无用,并引入了巨大的安全漏洞。 – colinm

+0

@colinm这里有一个原始参数吗? 'post_params'它是允许的params_,只有两个键允许'title'和'body',只有两个键传递给create方法。仔细读。 –