3

attr_accessibleと に使用されているロールを使用することは可能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

これを調べてソースコードを調べたところ、ActiveRecordオブジェクトの作成時に渡された役割が保護されたメソッドを介して公開されているよう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 に答える