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 method
with_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"}}
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
InformationsquelleAutor Harish Shetty
Vorausgesetzt, Sie haben
params[:review]
wie die Attribute " hash, müssen Sie einmerge!
:Edit:
Ich bin auch vorausgesetzt, Sie verwenden dies ist auf
create
Methode.Edit #2:
Es ist nicht gonna Arbeit auf
new
Methode, weil, wie Sie finden bei railsapi.com, die build-MethodeEdit #3:
Ich bin mir nicht sicher, ob dies der beste Weg, aber ich habe hier getestet und Es funktionierte...
Haben Sie diese Parameter:
So können Sie access-Berichte " Attribute so:
params[:place][:reviews_attributes]
und zu verschmelzen, dieuser_id
- Attribut, die Sie tun können:Nun
params[:place][:reviews_attributes]
sieht aus wie dieses Beispiel:es ist nie gonna Arbeit auf
new
Methode. siehe meine bearbeitete Antwort.ich bin glücklich, es zu tun auf erstellen, aber ich bin mir nicht sicher, wie Sie Sie Zusammenführen, die geschachtelte Attribut... siehe oben. :reviews_attributes => { :user_id => current_user.id } funktioniert nicht.
es ist
params[:reviews_attributes].merge!(:user_id => current_user.id)
mit diesem bekomme ich "undefined method `verbinden!' for nil:NilClass", versuchte params[:Ort][:reviews_attributes].Zusammenführen!(:user_id => current_user.id), bekommt gleichgültig access-Fehler. Hinzugefügt mein log oben.
InformationsquelleAutor Ju Nogueira
Können Sie oder können nicht wollen, fügen Sie ein verstecktes Feld im Formular, das die user_id. Dann die params-hash haben bereits den Wert. Wenn Sie sind besorgt über die Manipulation, man könnte es vergleichen, um das current_user.id. Dann wieder, vielleicht das ist, warum Sie versuchen, es auf diese Weise zu beginnen?
InformationsquelleAutor David Krider
Vielleicht sind Sie mit form_for eine schlechte syntax. Ich hörte auf mit hidden_fields nach einem Blick auf diese: http://apidock.com/rails/ActionView/Helpers/FormHelper/form_for
und dieser Kommentar: (Gott Segne Sie, nachocab!)
InformationsquelleAutor FernandoFabreti