2010-12-23 6 views
2

Ich versuche, ein Rekord, der in in einem has_many und belongs_to BeziehungRails - Wie setze ich den ID-Wert des neuen Datensatzes des Modells in hat viele/gehört zu Beziehung?

Benutzer hasMany Beiträge und Beiträge belongto

Benutzer zu erstellen
@post = Post.new(params[:post], :user_id => current_user.id) 
@post.save 

aber ich bin halten eine falsche Anzahl von Argumenten Fehler.

Kann ich das Feld user_id des Post-Modells automatisch irgendwie einstellen? Ich benutze Devise, von dem der current_user-Aufruf stammt.

Antwort

7

Ein paar mehr Möglichkeiten Siehe:

@post = Post.new(params[:post]) 
@post.user_id = current_user.id 
@post.save 

Oder:

@post = current_user.posts.build(params[:post]) 
@post.save 
3

Merge die params[:post] Hash mit {:user_id => current_user.id}:

@post = Post.new(params[:post].merge({:user_id => current_user.id})) 
@post.save 

Hash#merge

-2

Wenn Sie einfache Assoziationen has_many und soeigns_to verwenden, muss in der users-Tabelle keine Spalte post_id vorhanden sein. Es braucht nur eine user_id Spalte in der Tabelle Beiträge sein

Damit Sie tun können:

@post = Post.new(params[:post]) 
@post.user_id = session[:user_id] #or an equivalent. 
@post.save 
@user.posts << @post 
+0

Dies ist nach hinten und falsch. Das Schema des OP ist korrekt. Ihr Beispielcode wird nicht das tun, was Sie beschreiben. –

+0

@Jimmy - Sorry. Ich wurde etwas durcheinander gebracht. Habe meinen Fehler korrigiert. Trotzdem danke. –

+0

Die vierte Zeile im Code ist nicht erforderlich - das Hinzufügen der Benutzer-ID zum Post erstellt automatisch die Verknüpfung mit dem Benutzer. :) –