Я пытаюсь найти форму контакта, которая создает запись контакта и, возможно, несколько записей местоположения, если в списке отмечены несколько местоположений.Я думал о том, чтобы все записи местоположения создавались и затем уничтожались, если они не проверены.Я не думаю, что это оптимально.
Я использую многие ко многим отношениям в моделях.
Вот как они выглядят в данный момент:
contact.rb
class Contact < ApplicationRecord
has_many :contact_locations, dependent: :destroy
has_many :locations, through: :contact_locations
accepts_nested_attributes_for :contact_locations, allow_destroy: true, reject_if: :empty_location?
private
def empty_location?(att)
att['location_id'].blank?
end
end
location.rb
class Location < ApplicationRecord
has_many :locations, dependent: :destroy
has_many :contacts, :through => :contact_locations
has_many :contact_locations
end
contact_location.rb
class ContactLocation < ApplicationRecord
belongs_to :location
belongs_to :contact
end
contacts_controller.rb
def new
@contact = Contact.new
@locations = Location.all
4.times {@contact.contact_locations.new}
end
private
def contact_params
params.require(:contact).permit(:name, :phone, ..., contact_locations_attributes: [:location_ids])
end
new.html.rb
<%= form_with model: @contact do |f| %>
...
<%= @locations.each do |location| %>
<%= f.fields_for :contact_locations do |l| %>
<%= l.check_box :location_id, {}, location.id, nil %><%= l.label location.name %>
<% end %>
<% end %>
...
<% end %>
Кто-нибудь как заставить его работать правильно?Я работаю над Ruby 2.5.1 и Rails 5.2.1.
Большое спасибо.