Я пытаюсь создать приложение-событие, в котором каждое событие имеет несколько таблиц, и каждая таблица имеет несколько человек, сидящих за столом, событие имеет несколько билетов, которые сопоставляют людей с таблицами, на которых они сидят - > для этого я создал флажок, вложенный в поля fields_for: (который, в свою очередь, в форме события) Я предполагаю, что что-то не так с сильными параметрами или самой формой, но я не смог найти информацию, которая обеспечивает решение проблемы. После проверки флажков в форме, указывающей, какие люди будут сидеть за этой таблицей, и отправив форму и вернувшись к форме, я обнаружил, что флажки больше не проверяются ???Вложенные флажки в Rails
вот содержимое моей модели файлов
# models
class Event < ActiveRecord::Base
has_many :tables, dependent: :destroy
has_many :people , through: :tickets
has_many :tickets
accepts_nested_attributes_for :tickets, allow_destroy: true
accepts_nested_attributes_for :tables, allow_destroy: true
end
class Table < ActiveRecord::Base
belongs_to :event
has_many :tickets
has_many :people, through: :tickets
end
class Ticket < ActiveRecord::Base
belongs_to :table
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :tickets
has_many :tables, through: :tickets
end
Вот форма с частями опущенными для краткости.
<%= form_for(@event) do |f| %>
...
<%= f.fields_for :tables do |builder| %>
<%= render 'table_field', f: builder %>
<% end %>
<%= link_to_add_fields "Add Table", f, :tables %>
...
<% end %>
А вот список Флажок я реализовал в table_field
.
<% Person.all.each do |person| %>
<div class="field">
<%= check_box_tag "table[people_ids][]", person.id, f.object.people.include?(person) %> <%= f.label [person.first_name, person.last_name].join(" ") %>
</div>
<% end %>
это event_params
def event_params
params.require(:event).permit(:name, :description, :start, :end, :latitude, :longitude, :address, :data, :people_ids => [], tables_attributes: [:id, :number, :size, :people_ids => []]).tap do |whitelisted|
whitelisted[:data] = params[:event][:data]
end
Как получить галочки, чтобы быть постоянно проверяется в такой форме?
Я получаю ошибку undefined method 'people_ids 'для # <Таблица: 0x94f7b38> –
Исправлено, изменив ее на' <% = collection_check_boxes (: person,: people_ids, Person.all,: id,: first_name) do | человек | %> ', но контрольный список все еще не работает, когда я отправляю и обновляю ??? –
Это не должно быть так, но вы можете использовать хак. В приведенном выше коде <% if f.object.people.include? (Person)%> <% = check_box_tag "table [people_ids] []", person.id, checked: "checked"%><% = f .label [person.first_name, person.last_name] .join ("")%> <% else %> <% = check_box_tag "таблица [people_ids] []", person.id%><% = f.label [person.first_name , person.last_name] .join ("")%> <% end %> Проверьте, были ли люди представлены в событиях, если да, добавили проверенное свойство. –