Rails: есть ли ярлык модели для перечисления моих многочисленных атрибутов "attr_accessible" + "validates :sence => true"? - PullRequest
0 голосов
/ 18 января 2011

Во многих моих моделях рельсов у меня есть несколько полей, которые я называю «нормальными» атрибутами модели, то есть объектами, которые устанавливаются пользователем, затем отображаются позже и являются обязательными частями экземпляра модели. , Это кажется слишком многословным, чтобы всегда делать это:

class Person < ActiveRecord::Base
  attr_accessible :name
  attr_accessible :age
  attr_accessible :height

  validates :name, :presence => true
  validates :age, :presence => true
  validates :height, :presence => true
end

В идеале я бы хотел сказать rails "все, кроме автоматически сгенерированного поля ID, должно быть проверено и доступно для массового назначения". Как я могу это сделать, учитывая, что считается плохой практикой безопасности просто делать все доступным для массового назначения?

Обновление : существующий способ также кажется плохим в том, что я набираю свой список атрибутов дважды, что довольно подвержено ошибкам.

Ответы [ 3 ]

3 голосов
/ 18 января 2011

Определите свой собственный метод класса, скажем, по ActiveRecord::Base:

class ActiveRecord::Base
  def self.validate_presence_and_make_accessible *args
    attr_accessible *args
    validates_presence_of *args
  end
end

Тогда в ваших моделях:

class Person < ActiveRecord::Base
  validate_presence_and_make_accessible :name, :age, :height
end

Иногда я сосу на методы именования, кстати. Не стесняйтесь переименовать во что-то лучшее.

1 голос
/ 18 января 2011

Немного менее многословно:

class Person < ActiveRecord::Base
  attr_accessible :name, :age, :height
  validates :name, :age, :height, :presence => true
end

Указание только защищенных атрибутов:

class Person < ActiveRecord::Base
  attr_protected :id
  validates :name, :age, :height, :presence => true
end
0 голосов
/ 18 января 2011

Это проще:

class Person < ActiveRecord::Base
  attr_protected :id
  validates_presence_of :name, :age, :height
end

А что касается вашего комментария о практике обеспечения безопасности массовых назначений, я думаю, вы должны прочитать это: http://b.lesseverything.com/2008/3/11/use-attr_protected-or-we-will-hack-you

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...