2012-02-11 4 views
3

Есть ли другие способы установки атрибутов для моделей в Rails, кроме использования attribute=?Рубин на рельсах | Атрибуты настройки

Например, есть что-то вроде set_attribute(name, value)?

user = User.new 
user.set_attribute(:name, 'Jack') 
user.set_attribute(:surname, 'The Ripper') 
user.save 

# instead of 
user.name = 'Jack' 
user.surname = 'The Ripper' 

ответ

2

Существует метод write_attribute. Это должно быть то, что вы ищете.

EDIT

Вы можете использовать update_attributes, если вы хотите обновить несколько атрибутов сразу.

+0

Спасибо за ответ, люкапетта. Есть ли аналогичный метод, который позволяет сразу назначить несколько атрибутов? Что-то вроде 'write_attributes'. – Shamaoke

+0

[update_attributes] (http://apidock.com/rails/ActiveRecord/Base/update_attributes) метод доступен для немедленного обновления атрибутов (с сохранением) и здесь [attributes =] (http://apidock.com/rails/ ActiveRecord/Base/attributes% 3D), который просто изменяет исходный объект без сохранения – icanhazbroccoli

+0

@Shamaoke As 4pcbr сказал, что если вы хотите написать сразу несколько атрибутов, вы можете использовать update_attributes. – lucapette

3

смотрит на источник AR можно найти

# File activerecord/lib/active_record/persistence.rb, line 208 
def update_attributes(attributes, options = {}) 
    # The following transaction covers any possible database side-effects of the 
    # attributes assignment. For example, setting the IDs of a child collection. 
    with_transaction_returning_status do 
    self.assign_attributes(attributes, options) 
    save 
    end 
end 

так что вы можете использовать assign_attributes(attributes, options) для установки атрибутов без сохранения

Кроме того, если вы хотите установить атрибут по имени без вызова метода напрямую вы можете использовать user.send(:name=, 'Jack') вместо user.set_attribute(:name, 'Jack')

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