2014-04-15 2 views

ответ

42

От Guides

first_or_create

The first_or_create метод проверяет ли NIL первые возвращается или нет. Если он возвращает nil, тогда вызывается create. Это очень эффективно при сочетании метода. Давайте посмотрим пример.

Предположим, вы хотите найти клиента с именем «Andy», а если его нет, создайте его и добавьте его заблокированный атрибут в значение false. Вы можете сделать это, запустив:

Client.where(:first_name => 'Andy').first_or_create(:locked => false) 
# => #<Client id: 1, first_name: "Andy", orders_count: 0, locked: false, created_at: "2011-08-30 06:09:27", updated_at: "2011-08-30 06:09:27"> 

SQL, порожденный этим методом выглядит следующим образом:

SELECT * FROM clients WHERE (clients.first_name = 'Andy') LIMIT 1 
BEGIN 
INSERT INTO clients (created_at, first_name, locked, orders_count, updated_at) VALUES ('2011-08-30 05:22:57', 'Andy', 0, NULL, '2011-08-30 05:22:57') 
COMMIT 

first_or_create возвращает либо запись, которая уже существует или новый рекорд. В нашем случае у нас еще не было клиента с именем Andy, поэтому запись была создана и возвращена.

first_or_create!

Вы также можете использовать first_or_create!, чтобы создать исключение, если новая запись недействительна. Валидации не рассматриваются в этом руководстве, но предположим, что вы временно добавили

validates :orders_count, :presence => true 

к вашей модели клиента. Если вы попытаетесь создать нового Клиента, не пройдя количество заказов, запись будет недействительной, и будет создано исключение:

Client.where(:first_name => 'Andy').first_or_create!(:locked => false) 
# => ActiveRecord::RecordInvalid: Validation failed: Orders count can't be blank 
0

Получает первую запись, которая соответствует тому, что вы указали или создает один, если нет совпадений

0

Если вы отметите источник, вы увидите, что они почти идентичны. Единственное различие заключается в том, что первый вызывает метод «create», а другой - «create!». Это означает, что второй вызовет исключение, если создание не будет выполнено.

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