2012-04-14 15 views
0

Ich bin ein Neuling und habe viele Beiträge und Tutorials Railscast gesucht und kann immer noch nicht, um diesen Verband DingRuby on Rails -. Verband Ausgabe :(

Ich habe 2 Modelle, ein Hotel (mit dem Gerüst erstellt) und Einrichtung:

Der Punkt besteht darin, einem Hotel eine Einrichtung zuzuordnen, aber da meine Einrichtungstabelle alle Spalten mit booleschem Typ hat), würde eine Zeile in dieser Tabelle für ein Hotel ausreichen.

Die Sache ist, ich kann es nicht zu zeigen, und speichern/bearbeiten/aktualisieren de facilities. Ich habe eine hotel_id-Spalte erstellt, als ich die Modelleinrichtung erstellt habe. Mein Code ist:

Modelle:

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 

Meine Form in der Ansicht ist:


<%= 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%> 

Wie für Controller, ist der hotels_controller das gleiche wie wenn Sie hatte gerade Gerüstbau gemacht und mein facilities_controller ist leer.

Es ist nun die Einrichtungen in der Form zeigt, aber wenn ich auf "Erstellen" und es macht geltend, die ich erhalten:

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

und

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

wie für Parameter Eingang:

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

Irgendwelche Ideen? Was fehlt in den Controllern? Vielen Dank im Voraus wieder

+0

versuchen Sie '<% = f.fields_for @ hotel.facility do | facility_fields | %> ' – klump

+0

Gibt es einen Grund, warum du Street English schreibst? de = die? – Jonathan

+0

Fügen Sie den Controllercode hinzu, der ein neues Hotel zu Ihrer Frage erstellt oder speichert. Die Antwort von @Amar ist eine gute Vermutung, aber ohne Ihren Controller-Code ist es nur eine Vermutung. – mliebelt

Antwort

0

In Neu/Bearbeiten Aktion create @ hotel.facility || @ hotel.build_facility

0

Problem gelöst. Für jeden, der das gleiche Problem hat: Zu dem neuen Controller:

@[email protected]_facility 

@klump, dass Syntax falsch war, nachdem die richtigen Versuch ist:

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

Also danke Amar, um mich in die richtige Richtung zu weisen.