Вопрос по activerecord, ruby-on-rails – Rails attr_readonly не работает

5

В соответствии сэтот вопрос идокументация изattr_readonly должно быть возможно следующее:

class MyModel < ActiveRecord::Base
  attr_accessible :foo
  attr_readonly :bar
end

m = MyModel.create(foo: '123', bar: 'bar') # Should work
m.update_attributes(bar: 'baz')            # Should not work

Однако первый отказывает, говоря, что я не могу назначить массуbar, Что я скучаю?

Ваш Ответ

2   ответа
4

документация

attr_accessible takes a list of attributes that will be accessible. All other attributes will be protected.

Такattr_accessible сделалbar атрибут как защищенный от массового присвоения.

Я вижу, поэтому я должен добавить это к обоим,attr_accessible а такжеattr_readlony? Вид нелогичного ... lucas clemente
Нет, если вы хотите массово присвоить его, он не будет доступен только для чтения. Вы должны сделать только attr_accessible.
Но если я захочу назначить его только один раз при создании? lucas clemente
2

attr_accessible :key

а затем добавить еще одну проверку

validate :check_if_key_changed, :on=> :update

private
def check_if_key_changed
  if self.key_changed?
    errors.add(:key,"cant change key")
  end
end

Таким образом, вы сможете назначить его один раз при создании, а также убедиться, что он не обновляется.

Похожие вопросы