Как я могу перезаписать attr_readonly? - PullRequest
3 голосов
/ 09 мая 2011

У меня есть атрибут, который защищен с помощью attr_readonly, чтобы запретить пользователям изменять поле.

Я хочу иметь возможность изменить его, используя метод экземпляра.Это возможно?

1 Ответ

5 голосов
/ 09 мая 2011

Вы должны использовать attr_protected здесь вместо attr_readonly.Тогда вы будете защищены от массового присвоения из форм.

#in model
attr_protected :my_field
#in controller
obj = MyModel.new({:my_field => "dsadsad"})
obj.my_field
#=> nil
obj.my_field = "ololo"
obj.my_field
#=> "ololo"

РЕДАКТИРОВАНИЕ

Ситуация: вам нужно установить email только один раз: при создании пользователя.Тогда вы хотите редактировать электронную почту, только если вы администратор.

# Model
attr_protected :email

# Controller
def create
  @user = User.new params[:user]
  @user.email = params[:user][:email]
  @user.save
  respond_with @user
end

def update
  @user = User.find params[:id]
  @user.email = params[:user][:email] if curent_user.admin?
  @user.update_attributes params[:user]
  respond_with @user
end

Также проверьте: http://railscasts.com/episodes/237-dynamic-attr-accessible

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