Подтвердить что ты не робот

Изменение атрибутов нескольких объектов в одной строке

Мне было интересно, когда вы создаете объект, вы можете часто устанавливать несколько атрибутов в одной строке, например:

 @object = Model.new(:attr1=>"asdf", :attr2 => 13, :attr3 => "asdfasdfasfd")

Что делать, если я сначала хочу использовать find_or_create_by, а затем изменить другие атрибуты позже? Как правило, мне пришлось бы использовать несколько строк, например:    @object = Model.find_or_create_by_attr1_and_attr2 ( "asdf", 13)    @object.attr3 = "asdfasdf"    @object.attr4 = "asdf"

Есть ли способ установить атрибуты с использованием хэша, аналогичного тому, как метод Model.new принимает пары ключ-значение? Меня это интересует, потому что я могу установить несколько атрибутов в одной строке, например:

 @object = Model.find_or_create_by_attr1_and_attr2("asdf", 13)
 @object.some_method(:attr3 => "asdfasdf", :attr4 => "asdfasdf")

Если у кого есть какие-то идеи, это было бы здорово!

4b9b3361

Ответ 1

Вы хотите использовать assign_attributes или update_attributes:

@object.assign_attributes(:attr3 => "asdfasdf", :attr4 => "asdfasdf")

Если вы выберете update_attributes вместо этого, объект будет сохранен сразу (в ожидании любых проверок, конечно)

Ответ 2

Методы, которые вы ищете, называются assign_attributes или update_attributes.

@object.assign_attributes(:attr3 => "asdfasdf", :attr4 => "asdfasf") # @object now has attr3 and attr4 set.
@object.update_attributes(:attr3 => "asdfasdf", :attr4 => "asdfasf") # @object now has attr3 and attr4 set and committed to the database.

Есть некоторые проблемы с безопасностью использования этих методов в приложениях Rails. Если вы собираетесь использовать один из них, особенно в контроллере, не забудьте проверить документацию на attr_accessible, чтобы злоумышленники могли 't передавать произвольную информацию в поля модели, которые вы предпочли бы, чтобы не стать назначаемой массой.