Я использую first_or_create для заполнения таблицы списком подписчиков электронной почты (называемых членами). Код выглядит следующим образом:Rails first_or_create! создание нулевых значений в таблице базы данных
def community_members=(members)
self.members = members.split(",").map do |member|
Member.where(email: member.strip, community_id: self.id).first_or_create! unless member.strip == nil
end
end
Все работает отлично, за исключением того, что при добавлении дополнительных писем к одному сообществу, таблица включает колонку «community_id» для всех предыдущих строк на NULL.
Вот лог-сервер:
Member Load (0.2ms) SELECT "members".* FROM "members" WHERE "members"."email" = $1 AND "members"."community_id" = $2 ORDER BY "members"."id" ASC LIMIT 1 [["email", "[email protected]"], ["community_id", 1]]
SQL (0.3ms) INSERT INTO "members" ("email", "community_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["email", "[email protected]"], ["community_id", 1], ["created_at", "2015-04-30 16:14:25.930012"], ["updated_at", "2015-04-30 16:14:25.930012"]]
Member Load (0.2ms) SELECT "members".* FROM "members" WHERE "members"."community_id" = $1 [["community_id", 1]]
SQL (0.4ms) UPDATE "members" SET "community_id" = NULL WHERE "members"."community_id" = $1 AND "members"."id" = 30 [["community_id", 1]]
(0.3ms) COMMIT
Первый груз «член» делает именно то, что он должен делать. Но по какой-то причине он всегда заканчивается загрузкой второго члена, которая входит и устанавливает все поля «community_id» в NULL.
Сейчас я называю: community_member из формы на странице сообщества:
<%= form_for(@community) do |f| %>
<%= f.text_area :community_members, class:"form-control input-lg", placeholder:"Please add your list of comma separated member email addresses here" %>
<%= f.submit "Save", class: "btn btn-lg btn-green btn-block pad-top" %>
<% end %>
Кажется, я пропускаю что-то очевидное здесь. Есть идеи? Спасибо.
вы можете удалить! from first_or_create !, также я предполагаю, что функция community_members находится в модели сообщества. Не могли бы вы создать это в модели до того, как объект сообщества будет сохранен. – coderhs
Я попытался удалить! и это не имело никакого значения. Объект сообщества уже существует до добавления каких-либо членов, поэтому я не думаю, что он должен быть сохранен? – Lorenz