У меня есть приложение rails с событиями и event_registrants, кто-то может по существу зарегистрироваться для события.Рельсы, создающие форму в шаблоне show с вложенными_трибутами
Вот моя модель событий:
class Event < ActiveRecord::Base
has_many :event_registrants, :dependent => :destroy
accepts_nested_attributes_for :event_registrants, :reject_if => lambda { |a| a[:first_name].blank? }, :allow_destroy => true
Вот моя event_registrant модель:
class EventRegistrant < ActiveRecord::Base
belongs_to :event
attr_accessible :comment, :company, :email, :first_name, :last_name, :phone, :event_id
validates_presence_of :company, :email, :first_name, :last_name, :phone
end
На шаблоне шоу, я хотел бы включить форму, чтобы позволить кому-то регистрироваться непосредственно оттуда.
<%= form_for @event do |f| %>
<%= f.fields_for :event_registrants do |builder| %>
<%= render "registration_form", :f => builder %>
<% end %>
<%= f.submit 'Send it', :class => "blue-btn", :id => "registrant_submit" %>
<% end %>
Частичное:
<ul class="form" id="register_form">
<li><%= f.text_field :first_name, :placeholder => "First name *" %> <%= f.text_field :last_name, :placeholder => "Last name *" %></li>
<li><%= f.text_field :email, :placeholder => "Email address *", :class => 'wide' %></li>
<li><%= f.text_field :company, :placeholder => "Company name *", :class => 'wide' %></li>
<li><%= f.text_field :phone, :placeholder => "Phone number *", :maxlength => '14' %></li>
<li><%= f.text_area :comment, :placeholder => "Additional info", :class => 'wide', :rows => 4, :cols => 68 %></li>
</ul>
Наконец мой контроллер событий»
def show
@event = Event.where(:event_hosting_type => "eureka_event").find_by_permalink(params[:id])
1.times {@event.event_registrants.build}
respond_to do |format|
format.html # show.html.erb
format.json { render json: @event }
end
end
def update
@event = Event.find_by_permalink(params[:id])
respond_to do |format|
if @event.update_attributes(params[:event])
format.html { redirect_to @event, notice: "#{@event.title} updated." }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
def create
@event = Event.new(params[:event])
@event_registrant = @event.build_event_registrant
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'New event created.'}
format.json { render json: @event, status: :created, location: @event }
else
format.html { render action: "new" }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
Проблема у меня в том, что текущая форма будет отображаться, но будет только обновить текущую запись , имея 1.times {@event.event_registrants.build}
, добавит новую, пустую форму, но предыдущая запись будет там. Я бы хотел, чтобы кто-то представил свою информацию, сбросил форму и разрешил кому-то еще отправлять новую информацию.
Можете ли вы опубликовать журнал параметров? А также вы можете немного объяснить, что вы делаете? Вы создаете форму или обновление? – Pavan
Уверен, у меня есть несколько событий в моем приложении. Для каждого события я хочу разрешить кому-то зарегистрироваться для него на странице показа событий. Форма event_registrants помещается в шоу событий, поэтому я хотел бы создать новую запись регистратора каждый раз при отправке формы. –