Я использую драгоценный камень кокона для создания вложенной формы. У меня есть модель мероприятия, в которой много билетов и организаторов.
МОДЕЛЬ СОБЫТИЯ:
class Event < ActiveRecord::Base
has_many :organizers, dependent: :destroy
has_many :tickets, dependent: :destroy
accepts_nested_attributes_for :tickets, reject_if: :all_blank, allow_destroy: true
accepts_nested_attributes_for :organizers, reject_if: :all_blank, allow_destroy: true
end
МОДЕЛЬ ОРГАНИЗАТОРА:
class Organizer < ActiveRecord::Base
belongs_to :user
belongs_to :event
validates :user, presence: true
validates :event, presence: true
end
МОДЕЛЬ БИЛЕТА:
class Ticket < ActiveRecord::Base
belongs_to :event
has_many :bookings
end
КОНТРОЛЕР СОБЫТИЙ:
class EventsController < ApplicationController
def new
@event = Event.new
end
def create
@event = Event.new(event_params)
if @event.save
redirect_to event_path(@event)
else
render 'new'
end
end
def edit
@event = Event.friendly.find(params[:id])
end
def update
@event = Event.friendly.find(params[:id])
@event.update_attributes event_params
if @event.save
redirect_to event_path(@event), flash: { success: "Event updated succesfully." }
else
render 'edit'
end
end
private
def event_params
params.require(:event).permit(:title,:description, tickets_attributes: [:id, :event_id, :title, :limit, :_destroy], organizers_attributes: [:id, :event_id, :user_id, :_destroy])
end
end
НОВЫЙ ВИД
<%= simple_form_for @event, url: events_path do |f| %>
<%= f.input :title %>
<%= f.input :description %>
<div id="tickets">
<%= f.simple_fields_for :tickets do |ticket| %>
<%= render 'ticket_fields', f: ticket %>
<% end %>
<div class="links">
<%= link_to_add_association 'add ticket', f, :tickets %>
</div>
</div>
<div id="organizers">
<%= f.simple_fields_for :organizers do |organizer| %>
<%= render 'organizer_fields', f: organizer %>
<% end %>
<div class="links">
<%= link_to_add_association 'add organizer', f, :organizers %>
</div>
</div>
<%= f.button :submit %>
<% end %>
ОРГАНИЗАТОРЫ ПОЛЕ ЧАСТИЧНО:
<div class="nested-fields">
<%= f.input :user, collection: User.all, label_method: lambda { |user| user.email } %>
<%= link_to_remove_association "remove organizer", f %>
</div>
ПОЛЕ БИЛЕТОВ ЧАСТИЧНО:
<div class="nested-fields">
<%= f.input :title %>
<%= f.input :limit, disabled: f.object.no_limit %>
<%= f.input :no_limit %>
<%= link_to_remove_association "remove ticket", f %>
</div>
ЖУРНАЛЫ СЕРВЕРА:
Parameters:
{
"utf8"=>"✓",
"authenticity_token"=>"rct6..",
"event"=>{
"title"=>"zdtfbvc",
"description"=>"fdxcv",
"tickets_attributes"=>{
"1441016179377"=>{
"title"=>"tdhfgb",
"limit"=>"2",
"_destroy"=>"false"
}
},
"organizers_attributes"=>{
"1441017842699"=>{
"user"=>"3",
"_destroy"=>"false"
},
"1441017845556"=>{
"user"=>"2",
"_destroy"=>"false"
}
}
},
"commit"=>"Create Event"
}
Проблема в том, что билеты созданы и сохранены в базе данных, а организаторы - нет.