ruby-on-rails - Rails 中 protected 属性的分配

标签 ruby-on-rails mass-assignment attr-accessible attr-protected

我的用户模型上有一个字段受到保护,因为它决定了许可级别。因此它应该受到保护并且不能大规模分配。因此,尽管属性在 3.2 中默认受到保护,但这实际上是我想要的行为。

但是,在一种 Controller 方法上,我希望允许管理员分配此字段,例如在用户创建或用户更新时。

如何允许为特定 Controller 操作分配该属性?

例如,我有我的 Controller :

# app/controllers/admin/users_controller.rb

def create
    @user = User.new(params[:user])
# ...
end

现在我要做的就是从 params[:user] 中排除 clearance ,但即使在到达该行之前它似乎也会被过滤掉并引发异常(我尝试在该行之前放置一个调试器,甚至将其注释掉,它仍然引发异常)。

如果不是在调用 User#new 时捕获 protected 属性,那么在哪里捕获?

最佳答案

The Rails way为此,将在没有保护的情况下分配属性或使用管理员角色:

@user = User.new
@user.assign_attributes(params[:user], :without_protection => true)
@user.save

但是,我发现这有点乏味,所以我写了一个名为 sudo_attributes 的 gem (在我看来)这提供了更好的 API:

@user = User.sudo_new(params[:user])
@user.save

它模仿所有 Rails 实例化、创建和更新方法(new、build、create、create!、update_attributes 等)。

关于ruby-on-rails - Rails 中 protected 属性的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10989513/

相关文章:

ruby-on-rails - Rails after_create 回调无法访问模型的属性

ruby-on-rails - Rails 3 嵌套模型未知属性错误

ruby-on-rails - Rails,嵌套属性,无法批量分配错误

ruby-on-rails - 从 Rails 中的模型对象中调用访问器方法

ruby-on-rails - Rails 和 attr_accessible : is there a way to raise an exception if a non-mass-assignable attribute is mass-assigned?

ruby-on-rails - 如何在传递现有模型 ID 的 Rails 中创建自定义路由?

ruby-on-rails - Rails 5 忽略/lib 类?

ruby-on-rails - Rails 协会无法批量分配外键

ruby-on-rails - 如何停止批量分配?

javascript - 所有人评级的可访问属性