Steve Bourne
Steve Bourne

Reputation: 951

fields_for not rendering association name (belongs_to relationship)

I'm trying to create the form to create an event. Events belong_to a creator (of class user), and the form includes fields_for the creator.

Largely the form is working - it renders everything else properly, and the create action processes it properly when the fields_for @event.creator section is commented out. The fields_for tag is rendering event[user] tags instead of event[creator], though, and i can't figure out why. Ideas? Here are the relevant excerpts.

(in views/events/new.html.erb)

<%= form_for @event do |form| %>
   <%= render :partial => '/events/form', :object => form %>
   <%= form.submit 'Go!' %>
<% end %>

(in events/_form.html.erb)

...

<% if !signed_in? %>
  To create your event, please provide an email address and create a password. <br />


  <%= form.fields_for @event.creator do |uf| %>
    <div class="email_field">
      <%= uf.label :email %>
      <%= uf.text_field :email, :type => "email" %>
    </div>

...
  <% end %>
<% end %>

(controllers/events_controller.rb)

def new
   @event = Event.new

   if !signed_in?
     @event.build_creator
   end

   respond_to do |format|
     format.html # new.html.erb
     format.xml  { render :xml => @event }
   end
 end

(models/event.rb)

belongs_to :creator, :class_name => "User"
accepts_nested_attributes_for :creator

Largely this works, but the form elements render as

<div class="email_field"> 
  <label for="event_user_email">Email</label> 
  <input id="event_user_email" name="event[user][email]" size="30" type="email" /> 
</div> 
<div class="password_field"> 
  <label for="event_user_password">Password</label> 
  <input id="event_user_password" name="event[user][password]" size="30" type="password" /> 
</div>
...

the issue here is event_user and event[user] instead of event_creator and event[creator]; when i submit the form i get an error that event doesn't have a User field.

Upvotes: 0

Views: 1308

Answers (1)

Bohdan
Bohdan

Reputation: 8408

<%= form.fields_for :creator, @event.creator do |uf| %>

Upvotes: 3

Related Questions