Создайте несколько новых записей из флажков в форме, используя вложенные атрибуты в Rails - PullRequest
0 голосов
/ 14 ноября 2018

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

Я использую многие ко многим отношениям в моделях.

Вот как они выглядят в данный момент:

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.

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Я закончил с предложением Кирти по следующему вопросу: Rails Вложенные атрибуты с циклом check_box

Оказывается, мне нужно было сделать небольшую корректировку в теге fields_for моей формы.

Большое спасибо за помощь!

0 голосов
/ 14 ноября 2018

Я думаю, что вашим решением является шаблон объектов формы.

У вас может быть что-то вроде этого:

<%= form_for @user do |f| %>
  <%= f.email_field :email %>

  <%= f.fields_for @user.build_location do |g| %>
    <%= g.text_field :country %>
  <% end %>
<% end%>

И преобразовать его во что-то более читаемое, что позволит вам создавать экземпляры мест внутриобъект регистрации, проверяющий значение флажков.

<%= form_for @registration do |f| %>
  <%= f.label :email %>
  <%= f.email_field :email %>

  <%= f.input :password %>
  <%= f.text_field :password %>

  <%= f.input :country %>
  <%= f.text_field :country %>

  <%= f.input :city %>
  <%= f.text_field :city %>

  <%= f.button :submit, 'Create account' %>
<% end %>

Здесь вы найдете, как применить шаблон: https://revs.runtime -revolution.com / save-множественные модели-с-формой-Объекты-и-операция-2c26f37f7b9a

...