2016-02-04 7 views
0

У меня есть массив строк:Как использовать массив строк для создания нескольких объектов ActiveRecord сразу?

days = ["Monday", "Tuesday", "Wednesday"] 

Я хотел бы создать день в базе данных имени каждого из них:

days.each do |day| 
    Day.create(name: day) 
end 

Это не так мило, однако. В прошлом я был в состоянии очистить списки атрибутов, передавая их в attr_accessor с восклицательным знаком:

attr_accessor *ATTRIBUTES

Я ищу, чтобы быть в состоянии сделать что-то вроде этого:

Day.create(name: *days) 

Является ли подобным интерфейсом доступным для ActiveRecord?

ответ

1

Вы можете создать их на одном дыхании: упоминается

Day.create(days.map { |day| {name: day} }) 

create документы:

Создает объект (или несколько объектов) и сохраняет его в базу данных, если валидация проходит. Параметр атрибутов может быть либо Hash, либо ArrayHashes.

+0

Благодарим за это! Отвечает на вопрос точно. Однако мой реальный случай использования требует #find_or_create. Посмотрев документацию на #find_or_create, она не имеет одинаковой функциональности. Вы видите то же самое? –

+0

@DylanRichards Я вижу то же самое. 'find_or_create_by' не будет создавать несколько объектов за один раз. Но вы можете применить другие трюки. –

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