1

Ich versuche eine Ereignis-App zu erstellen, in der jedes Ereignis mehrere Tabellen enthält und jede Tabelle mehrere Personen an einem Tisch hat. Das Ereignis enthält mehrere Tickets, die die Personen den Tabellen zuordnen, an denen sie sitzen. > Um dies zu erreichen, habe ich eine Checkbox erstellt, die in den fields_for: tables verschachtelt ist (was wiederum in der Event-Form ist). Ich vermute, dass etwas mit den starken Parametern oder dem Formular selbst falsch ist, aber ich konnte nichts finden Informationen, die eine Lösung für das Problem bieten. Nachdem ich die Checkboxen im Formular angekreuzt habe, welche Leute an diesem Tisch sitzen und das Formular abschicken und zum Formular zurückkehren werde, finde ich, dass die Checkboxen nicht mehr überprüft werden ???Verschachtelte Kontrollkästchen in Rails

hier sind die Inhalte meines Modells ist

# 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 

Dateien Hier wird die Form mit Teilen der Kürze halber weggelassen.

<%= 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 %> 

Und hier ist die Checkbox-Liste I im table_field umgesetzt haben.

<% 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 %> 

ist dies die 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 

Wie erhalte ich die Kontrollkästchen beharrlich in dieser Form überprüft werden?

Antwort

0

können Sie verwenden 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 %> 

Es werden auch Daten bestehen.

+0

Ich bekomme den Fehler undefinierte Methode 'people_ids 'für #

+0

Fixed es, indem Sie es in' <% = collection_check_boxes (: person,: people_ids, Person.all,: id,: first_name) do | Person | %> 'aber die Checkliste funktioniert immer noch nicht, wenn ich sie einchege und aktualisiere ??? –

+0

Das sollte nicht der Fall sein, aber Sie können einen Hack verwenden. In Ihrem obigen Code <% if f.object.people.include? (Person)%> <% = check_box_tag "Tabelle [people_ids] []", person.id, checked: "checked"%><% = f .label [Person.Erster_Name, Person.Last_Name] .join ("")%> <% = check_box_tag "Tabelle [People_IDs] []", person.id%><% = f.label [person.first_name , person.last_name] .join ("")%> <% end %> Überprüfen Sie, ob Personen in Ereignissen angezeigt werden, wenn ja, angefügte Eigenschaft hinzufügen. –

Verwandte Themen