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?
Ich bekomme den Fehler undefinierte Methode 'people_ids 'für # –
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 ??? –
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. –