1

Я пытаюсь создать приложение-событие, в котором каждое событие имеет несколько таблиц, и каждая таблица имеет несколько человек, сидящих за столом, событие имеет несколько билетов, которые сопоставляют людей с таблицами, на которых они сидят - > для этого я создал флажок, вложенный в поля 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 

Как получить галочки, чтобы быть постоянно проверяется в такой форме?

ответ

0

Вы можете использовать http://apidock.com/rails/v4.0.2/ActionView/Helpers/FormOptionsHelper/collection_check_boxes

<%= f.collection_check_boxes(:people_ids, Person.all, :id, :name) do |person| %> 
    <%= person.label { person.check_box } %> 
<% end %> 

Он будет сохранять данные, а также.

+0

Я получаю ошибку undefined method 'people_ids 'для # <Таблица: 0x94f7b38> –

+0

Исправлено, изменив ее на' <% = collection_check_boxes (: person,: people_ids, Person.all,: id,: first_name) do | человек | %> ', но контрольный список все еще не работает, когда я отправляю и обновляю ??? –

+0

Это не должно быть так, но вы можете использовать хак. В приведенном выше коде <% 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 %> Проверьте, были ли люди представлены в событиях, если да, добавили проверенное свойство. –

 Смежные вопросы

  • Нет связанных вопросов^_^