2013-03-13 156 views
4

这是奇怪的我,所以我只是好奇,如果别人遇到了这一点:不允许参数?

我有以下几点:

def credential_params 
    params.required(:credential).permit(:name,:agent_ids) 
end 

在我的控制器创建和更新操作我使用质量分配上述参数调用...

@credential.update_attributes(credential_params) 

但我仍然得到Unpermitted parameters: agent_ids

如果我更改为params.required(:credential).permit!(即允许所有)当然它的作品。

我觉得我必须在这里俯瞰一些明显的疑难杂症......谁知道它可能是什么?

+0

不应该说是'require'? – jvnill 2013-03-13 02:52:44

+0

@jvnill - 看完文档后,应该是,但你知道吗?它也按'必需'的方式工作。我不知道这是否是一个错误或功能... – Andrew 2013-03-13 02:55:14

+0

@jvnill:这是一个特点,'required'是'require'的别名,看近来源:https://github.com/rails/strong_parameters/blob/主/ lib目录/ action_controller/parameters.rb#L58 – Andrew 2013-03-13 02:59:16

回答

5

尝试

params.require(:credential).permit(:name, { :agent_ids => [] }) 
+0

我认为我们发布大约在同一时间,但我会给你答案,因为它不值得任何分给我:)感谢您抽空看看! – Andrew 2013-03-13 03:06:11

+0

啊谢谢。是的,它看起来像几秒钟的差异。 – jvnill 2013-03-13 03:14:10

5

明白了。

数组是不是supported types之一:

允许的标量类型包括字符串,符号,NilClass,数值,TrueClass,FalseClass,日期,时间,日期时间,StringIO的,IO,ActionDispatch :: Http :: UploadedFile和Rack :: Test :: UploadedFile。

因此该解决方案是指定一个数组,像这样:

params.require(:credential).permit(:name, :agent_ids => []) 

希望别人发现这很有用。