2013-05-14 3 views
0

Пожалуйста, объясните, как я могу делать записи в базе данных несколькими способами, изменяя атрибуты. Я НЕ хочу быть attr_accessible.Проблема массового присвоения

Например, в модели пользователя:

attr_accessible :email, :password, :password_confirmation, :guest 

Я не хочу «админы» истинная или ложная строки поместить здесь, потому что проблема безопасности

+1

Возможно, вы хотите разрешить изменять строку администратора только для администратора, поэтому используйте 'attr_accessible: email,: password,: password_confirmation,: guest,: admin, as:: admin', а затем обновите' update_attributes ({admin: true }, as:: admin) '(массовое присвоение) –

ответ

0

можно присвоить атрибут вручную, например, если ваша модель называется User вы можете сделать следующее:

user = User.first 
user.update_attributes(attributes_hash) 
user.admin = true 
user.save 

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

0

Я думаю, вы можете спросить, как изменить атрибут admin в тестовой среде или среде разработки, не добавляя ее к attr_accessable.

Одним из способов является метод toggle. Например,

user = User.first 
user.admin? 
=> false 
user.toggle!(:admin) 
user.admin? 
=> true 

Пару вещей toggle рассмотреть. Атрибут должен передаваться как символ, и все обратные вызовы и проверки пропускаются. Другими словами, будьте осторожны для чего-либо, кроме тестирования и разработки. Таким образом, вы можете назначить атрибут admin без добавления его в attr_accessable.

Смежные вопросы