有谁知道,如果使用strong_parameters gem,我们可以逐步添加如下所示的属性:
def user_params
params[:user].permit(:name, :email)
if current_user.admin?
params[:user].permit(:is_admin)
end
end
如果当前用户是管理员,我会逐渐要求代码允许:is_admin
参数。它不应该只添加到先前允许的参数列表(:name
和:email
)吗?
答案 0 :(得分:1)
我这样做的方法就是将所有参数放在类中,就像强参数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)
因为它只是一个数组,你可以构建数组,然后只需使用*将它传递给许可证。
答案 1 :(得分:0)
这是一个有趣的问题。我不确定,但在这种情况下我的直觉反应就是测试它。无论是否休息,你都会得到答案。
答案 2 :(得分:0)
我有一个带有过期日期参数的用户模型,我希望只有管理员才能设置。没有办法将参数逐步添加到许可列表......所以你必须打破DRY并像这样做......
if can? :manage, :all
params.require(:user).permit(:first_name, :last_name, :email, :expiration_date)
else
params.require(:user).permit(:first_name, :last_name, :email)
end