他们这样做的方式是将我所有的参数放在一个类中,就像强参数 railscast 一样。
这样我就有了这样的东西
class PermittedParams < Struct.new(:params,:admin)
def administrator_attributes
allowed = [:email, :name, :password, :password_confirmation, :password_digest]
if admin.has_any_role? :realm_admin, :system_admin
allowed << :active << :roles
end
allowed
end
.... other models ....
def method_missing(method,*args,&block)
attributes_name = method.to_s + '_attributes'
if respond_to? attributes_name, false
params.require(method).send(:permit, *method(attributes_name).call)
else
super
end
end
end
然后在控制器中调用@administrator.update_attributes(permitted_params.administrator)
因为它只是一个数组,您可以构建数组,然后只需使用 * 将其传递给许可。