Kommentar zu Benutzer-und Post-Modelle (Ruby on Rails)
Bin ich neu auf die Schienen. Ich Baue meine erste app - einfache blog. Ich habe Benutzer-und Post-Modelle, bei denen jeder Benutzer kann schreiben viele Beiträge. Jetzt möchte ich hinzufügen, Kommentar, Modell, wo jeder posten kann, haben viele Kommentare, und auch jeder Benutzer kann kommentieren, alle post, die durch andere Benutzer.
Im Kommentar-Modell habe ich
id \ body \ user_id \ post_id
Spalten.
Modell Verbände:
Benutzer.rb
has_many :posts, dependent: :destroy
has_many :comments
post.rb
has_many :comments, dependent: :destroy
belongs_to :user
Kommentar.rb
belongs_to :user
belongs_to :post
Also wie kann ich richtig definieren, erstellen Aktion in CommentsController?
Danke.
UPDATE:
Routen.rb
resources :posts do
resources :comments
end
comments_controller.rb
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
if @comment.save
redirect_to @post
else
flash.now[:danger] = "error"
end
end
Das Ergebnis ist
--- !ruby/hash:ActionController::Parameters
utf8: ✓
authenticity_token: rDjSn1FW3lSBlx9o/pf4yoxlg3s74SziayHdi3WAwMs=
comment: !ruby/hash:ActionController::Parameters
body: test
action: create
controller: comments
post_id: '57'
Wie wir sehen können, es nicht zu senden, user_id und funktioniert nur, wenn ich löschen validates :user_id, presence: true
string aus Kommentar.rb
Irgendwelche Vorschläge?
- So starten Sie mit, die Sie nicht wirklich brauchen, zu assoziieren Kommentare zu user direkt. Sie können zu verknüpfen, um Benutzer indirekt, durch die Beiträge. Dann, ein Kommentar ist gebunden an eine @post... Also @post.Kommentare.erstellen(comment_params)...
- So wie definiere ich @post? Ich habe versucht, smth like this
@post = Post.find(params[:id]) @comment = @post.comments.create(comment_params)
aber bekam die Fehlermeldung "Konnte nicht Posten, ohne ID" - Lesen Sie ein wenig über routing und verschachtelte Ressourcen. Tun, spielen (da Sie das lernen sind) und wieder hierher kommen, wenn Sie nicht können es selbst tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrer Art, Sie sollten setzen diese:
Und auch Sie sollten zu entfernen user_id aus comment_params so stark Parametern .
Hoffe, das wird Ihnen helfen .
Verbände
Geben Sie eine definition von dem, was hier passiert, Sie haben sich daran zu erinnern, wenn Sie einen Eintrag erstellen, sind Sie im Grunde das füllen einer Datenbank. Ihre Assoziationen definiert sind, mit
foreign_keys
Wenn Sie sich Fragen, wie auf "Kommentare hinzufügen zu
User
undPost
Modell" - die Quintessenz ist Sie nicht; Sie können einen Kommentar hinzufügen, um dieComment
Modell, und ordnen Sie es mit einemUser
undPost
:Diese Ansagen Schienen zu suchen
user_id
undpost_id
imComment
Modell standardmäßig.Dies bedeutet, wenn Sie wollte, um einen Kommentar erstellen direkt aus und ordnen Sie es zu einem dieser Verbände durch einfaches Auffüllen der
foreign_keys
wie Sie möchten (oder verwenden Sie Rails-Objekte, um Sie bevölkern)Also, wenn man sparen möchte
comment
Sie kann hierzu:Umgekehrt, können Sie behandeln Sie mit standard-Rails-Objekte (wie die akzeptierte Antwort angegeben hat)