Probleme mit build-params für die accepts_nested_attributes_for

Ich versuche, fügen Sie die user_id, um eine geschachtelte Attribut, das gebaut wird, die von einem übergeordneten controller, aber es scheint nicht den gewünschten Effekt haben?

Ie. Ich habe ein Modell mit dem Namen Ort.rb, die accepts_nested_attributes_for :reviews und has_many :reviews, :as => :reviewable, :dependent => :destroy

Die geschachtelte Attribut funktioniert einwandfrei und ich Baue es in den Orten controller wie so...

neue Aktion

@review = @place.reviews.build(:user_id => current_user.id)

erstellen Aktion

params[:place].merge(:user_id => current_user.id)
params[:place][:reviews_attributes].merge!(:user_id => current_user.id)* bad
@place = Place.new(params[:place])

dies ist die ursprüngliche, für das Modell platzieren, um eine user_id, jetzt muss ich die user_id, die für die geschachtelte Bewertungen Modell als gut. Es mag seltsam erscheinen, dass die Orte und die Bewertungen haben beide user_ids, aber die Leute können das hinzufügen neuer Bewertungen für den gleichen Ort...

möglich, wie das aber funktioniert nicht:

@place = Place.new(params[:place].merge(:user_id => current_user.id, :reviews_attributes => { :user_id => current_user.id } ))

bekomme die Fehlermeldung: undefined methodwith_indifferent_access' 3:Fixnum`

oder

@place = Place.new(params[:place].merge(:user_id => current_user.id, :reviews_attributes => { "0" =>  { :user_id => current_user.id }}))

fügt die richtige user_id, sondern ersetzt den Inhalt der Prüfung mit NULL ;-(

Ich war vorher hinzufügen der Benutzer durch die form, aber möchte es tun, bis Sie den controller, so dass es fügt nur die user_id, die auf die Bildung, als eine Besondere überprüfung möglicherweise aktualisiert werden, indem jemand anderes, und ich will nicht, dass die update-ändern der Benutzerkennung von der original-Verfasser...

alten Weg, der funktioniert:

<%= e.label :content, "Review" %><br />
<%= e.text_area :content, :rows => 20, :class => 'jquery_ckeditor' %><br />
<%= e.hidden_field :user_id, :value => current_user.id %> #want to remove this line

aber durch die Steuerung der build-Methode mit der Optionen keine Auswirkung hat? Irgendwelche Ideen? Kann ich dies nicht durch das bauen?

Die Ausgabe im log:

    Parameters: {"commit"=>"Submit", "action"=>"create", "city_id"=>"prague",
 "controller"=>"places", "place"=>{"address"=>"fsdfsdf", "name"=>"sdfsdfsd",
 "reviews_attributes"=>{"0"=>{"content"=>"<p>\r\n\tsdfsdfsdfsdfsdfsdfsdf sdfsdfsdf</p>\r
\n"}}, "website"=>"", "city_id"=>"1036", "place_type"=>"1"}}
Ich Verstand es nicht sehr gut. Sie sind das hinzufügen der user_id im controller aber es funktioniert nicht, ist das richtig? Wie haben Sie das Gebäude der review in der Steuerung vor?
Ich haben den Bau der Beurteilung durch die Orte controller die ganze Zeit und es funktioniert gut, außer, bevor ich das hinzufügen der user_id für den review über die Ansicht..., die ich aufgenommen und versuche jetzt, es zu tun, direkt in der build-Methode. Sprich vorher war es nur @Ort.Bewertungen.bauen und jetzt habe ich versucht, mit @statt.Bewertungen.bauen(:user_id => current_user.id), die scheint zu funktionieren über die Konsole.

InformationsquelleAutor holden | 2010-04-27

Schreibe einen Kommentar