Я ссылаюсь на этот пост переполнения стека: Как получить Rails build и fields_for для создания только новой записи и не включать существующую?
В моем случае, у меня есть это:
<%= form.fields_for :campaign_schedule, @campaign.build_campaign_schedule do |campaign_schedule| %>
Если @campaign
еще не имеет campaign_schedule
, тогда создается новый campaign_schedule
и отображаются поля text_fields в форме, чтобы пользователь мог предоставить данные для нового campaign schedule
.
Однако, что если @campaign
уже имеет существующий campaign_schedule
? Я получаю сообщение об ошибке, используя эту форму fields_for
, утверждая:
ActiveRecord :: RecordNotSaved (Не удалось удалить существующий связанный
campaign_schedule. Запись не удалось сохранить после того, как ее внешний ключ был
установлен на ноль.):
Я предполагаю, что это потому, что campaign_scheduled
уже существует для @campaign
, и он пытается построить новый.
Должен ли я просто пойти с чем-то вроде этого?
<% if @campaign.campaign_schedule.nil? %>
<%= form.fields_for :campaign_schedule, @campaign.build_campaign_schedule do |campaign_schedule| %>
<% else %>
<%= form.fields_for :campaign_schedule, do |campaign_schedule| %>
<% end %>
Или есть лучший способ сделать это? У меня в основном есть такие ассоциации:
#app/models/campaign.rb
class Campaign < ApplicationRecord
has_one :campaign_schedule
accepts_nested_attributes_for :campaign_schedule
end
и
#app/models/campaign_schedule.rb
class CampaignSchedule < ApplicationRecord
belongs_to :campaign
end
EDIT
Похоже, мое условие if
не будет работать в любом случае, потому что end
для этого условия конфликтует с условием form.fields_for
, поэтому оно не будет работать. Думаю, мне нужно выяснить, как манипулировать form.fields_for
для создания ассоциации, только если она не существует.