我正在使用Rails 4强大的参数构建一个Web应用程序。
构建管理员后台管理器时,我想知道允许所有模型属性的最佳方法是什么?
现在,我这样写:
def user_params
params.require(:user).permit(User.fields.keys)
end
您认为更好的方法吗?
我正在使用Rails 4强大的参数构建一个Web应用程序。
构建管理员后台管理器时,我想知道允许所有模型属性的最佳方法是什么?
现在,我这样写:
def user_params
params.require(:user).permit(User.fields.keys)
end
您认为更好的方法吗?
Answers:
您可以致电许可的爆炸式版本。
params.require(:user).permit!
供参考的源代码:
def permit!
each_pair do |key, value|
convert_hashes_to_parameters(key, value)
self[key].permit! if self[key].respond_to? :permit!
end
@permitted = true
self
end
permit :all
顺便说一句,我认为如果有类似的东西,对我来说似乎比Rail的方法更像Railish,这通常意味着接收者已被更频繁地更改,而不是将方法标记为危险。
permit(:all)
允许名为的字段:all
。要使这种样式像您所说的那样起作用,Rails必须为处理提供特殊情况:all
-我认为这将是丑陋且令人困惑的。如果您有一个名为“ all”的专栏,那么您将会大吃一惊!我同意爆炸方法是次优的选择。permit_all
如果要设计API,我将提供更好的选择。
:all
评论感到后悔。=)。permit_all
听起来比爆炸更好。
Skull0inc的答案有效,但您可能需要删除created_at
和updated_at
。强参数的目的是仅列出您要由控制器更新的属性。就像是...
def user_params
params.require(:user).permit(User.column_names - ["created_at", "updated_at"])
end