benc
benc

Reputation: 2018

Nested form not rendering Rails 3.2

The nested form in the view just won't render, unless I remove the f attribute, in which case the submit button will not work. I have two models, job and employer. I've been following the railscast here

job.rb

  attr_accessible :title, :location, :employers_attributes,     
  belongs_to :employers
  accepts_nested_attributes_for :employers

employer.rb

 attr_accessible :companyname, :url
 has_many :jobs

jobs_controller.rb

  def new

    @job = Job.new
    @employer = Employer.new
  end

_form.html

<%= form_for(@job) do |f| %>


    <%= f.label :title %>
    <%= f.text_field :title %>


    <%= f.label :location %>
    <%= f.text_field :location %>



  <%= f.fields_for :employers do |builder| %>

        <%= builder.label :companyname, "Company Name" %>
        <%= builder.text_field :companyname %>


        <%= builder.label :url, "Web Address" %>
        <%= builder.text_field :url %>

    <% end %>


  <div class="actions">
    <%= f.submit %>
  </div>

 <% end %>

Any input would be brilliant - thanks

Upvotes: 0

Views: 54

Answers (2)

Lazarus Lazaridis
Lazarus Lazaridis

Reputation: 6029

This happens because your job has no employers.

Change your code to this:

def new
  @job = Job.new
  @job.employer = @job.build_employer
end

In your job.rb change:

attr_accessible :title, :location, :employer_attributes,     
belongs_to :employer
accepts_nested_attributes_for :employer

Upvotes: 2

zolter
zolter

Reputation: 7160

This line:

belongs_to :employers

Should be singulars:

belongs_to :employer 

With this association you not need nested form you can use select for pick employer for each job.

But if you need many employers for each job and each job can have many employers see this screencast

Upvotes: 1

Related Questions