3

是否可以使用用于attr_accessibleand的角色attr_protected?我正在尝试设置仅在不是管理员时执行的验证(例如这种http://launchware.com/articles/whats-new-in-edge-scoped-mass-assignment-in-rails-3- 1 )。例如:

class User < ActiveRecord::Base
   def validate(record)
     unless # role.admin?
       record.errors[:name] << 'Wrong length' if ...
     end
  end
end

user = User.create({ ... }, role: "admin")
4

3 回答 3

1

在查看并挖掘源代码后,似乎在创建 Active Record 对象时传入的角色是通过受保护的方法公开的mass_assignment_role。因此,有问题的代码可以重写为:

class User < ActiveRecord::Base
  def validate(record)
    unless mass_assignment_role.eql? :admin
      record.errors[:name] << 'Wrong length' if ...
    end
  end
end

user = User.create({ ... }, role: "admin")
于 2013-01-18T08:22:28.483 回答
0

当然可以是这样的:

class User < ActiveRecord::Base
  attr_accessible :role

 validates :record_validation

 def record_validation
   unless self.role == "admin"
     errors.add(:name, "error message") if ..
   end
 end
于 2013-01-18T02:18:10.790 回答
0

你可以这样做

class User < ActiveRecord::Base
  with_options :if => :is_admin? do |admin|
    admin.validates :password, :length => { :minimum => 10 } #sample validations
    admin.validates :email, :presence => true #sample validations
  end
end

5.4 分组条件验证

于 2013-01-18T04:17:54.360 回答