0

I'm a newbie and have searched many posts and railscast tutorials and still cant get around this associations thing.

I have 2 models, a Hotel (created by scaffolding) and Facility.

The point is to associate a facility to a hotel, but since my facility table has all the columns it needs with boolean type), a row in that table would do for one hotel.

The thing is, I can't get it to show, and save/edit/update de facilities. I've created a hotel_id colum when creating the model Facility. My code is:

Models:

class Facility < ActiveRecord::Base

  belongs_to :hotel

  attr_accessible :concierge, :hotel_id, :room24h

end


class Hotel < ActiveRecord::Base

  has_one :facility, :dependent => :destroy


  accepts_nested_attributes_for :facility, :allow_destroy => true

  attr_accessible :name, :rating, :recommended, :facility_attributes

end

My form in the view is:


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

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>

  <div class="field">
    <%= f.label :rating %><br />
    <%= f.number_field :rating %>
  </div>

  <div class="field">
    <%= f.label :recommended %><br />
    <%= f.check_box :recommended %>
  </div>

  <br />
    Hotel Facilities

    <%= f.fields_for :facility do |facility_fields| %>
 <div class="field">
    <%= facility_fields.label :room24h, "24h Room Service:" %>
    <%= facility_fields.check_box :room24h %>
  </div>

 <div class="field">
    <%= facility_fields.label "Concierge:" %>
    <%= facility_fields.check_box :concierge %>
  </div>

<%end%>

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

As for Controllers, the hotels_controller is the same as if you had just done scaffolding and my facilities_controller is empty.

It is now showing the facilities in the form, but when i click "Create" and it submits, I get:

"Can't mass-assign protected attributes: @hotel"

and

app/controllers/hotels_controller.rb:46:in `new'
app/controllers/hotels_controller.rb:46:in `create'

as for parameters input:

{"hotel"=>{"rating"=>"1",
 "name"=>"aaa",
 "recommended"=>"0",
 "@hotel"=>{"room24h"=>"1",
 "concierge"=>"1"}},
 "commit"=>"Create Hotel",
 "utf8"=>"✓",
 "authenticity_token"=>"YU7KEJ8qz0iQcXPGkLP6BSJn7JL6df1HvuS5JnjK2eU="}

Any ideas? What is missing in the controllers? Thanks in advance again

Silver
  • 693
  • 1
  • 10
  • 27

2 Answers2

0

In New/Edit action create @hotel.facility || @hotel.build_facility

Amar
  • 6,874
  • 4
  • 25
  • 23
0

Problem solved. To anyone who has the same issue: Added to the new controller:

@facility=@hotel.build_facility

@klump, that syntax was incorrect, after trying the correct one is:

<%= f.fields_for :facility do |fc|%>

So thank you Amar, for pointing me in the right direction.

Silver
  • 693
  • 1
  • 10
  • 27