2017-02-17 3 views
0

Ich lerne derzeit Schienen und habe ein Problem, wenn ich versuche, einen Kommentar hinzuzufügen. Wenn Benutzer A unter dem Beitrag von Benutzer B kommentiert, wird der Kommentar unter allen Posts von Benutzer A angezeigt und nicht unter dem spezifischen Beitrag von Benutzer B.ROR: Hinzufügen von Kommentaren zum Post-Problem

Ich denke, dass das Problem eher mit der Ansichtsseite als mit dem Kommentar zu tun hat in der Datenbank gespeichert werden.

comment.rb

class Comment < ApplicationRecord 
belongs_to :user 
belongs_to :pin 
end 

comments.controller.rb

class CommentsController < ApplicationController 

before_action :set_pin 

def create 
    @comment = @pin.user.comments.build(comment_params) 
    @comment.user_id = current_user.id 

    if @comment.save 
    redirect_to root_path 
    else 
     render root_path 
    end 
end 

private 

def comment_params 
    params.require(:comment).permit(:content) 
end 

def set_pin 
    @pin = Pin.find(params[:pin_id]) 
end 
end 

index.html.erb

- if pin.user.comments 
        - pin.user.comments.each do |comment| 
         .commentContainer 
          %h4.desc 
           %strong 
            =link_to (pin.user.Username), user_path(pin.user_id) 
           = comment.content 

Beliebig Ideen, wie das zu beheben ist?

BEARBEITEN.

Kommentare Tabelle:

0|id|INTEGER|1||1 
1|user_id|integer|0||0 
2|pin_id|integer|0||0 
3|content|text|0||0 
4|created_at|datetime|1||0 
5|updated_at|datetime|1||0 

sqlite> select * from comments; 
1|15||Nice shot!|2017-02-07 16:13:06.707372|2017-02-07 16:13:06.707372 
2|15||Cool pic|2017-02-07 16:25:27.780830|2017-02-07 16:25:27.780830 
3|14||test|2017-02-08 14:08:17.397782|2017-02-08 14:08:17.397782 

Antwort

0

Ich glaube, Sie richtig sind, das Problem nur ist, wie Sie sie angezeigt werden.

Sie möchten den Benutzer aus der Anzeige der Kommentare entfernen. Was Sie tun möchten, ist, die Liste der Kommentare zu zeigen, die zu dem Pin gehören, und dann einfach auf die Daten des Benutzers zuzugreifen.

- if pin.comments 
    - pin.comments.each do |comment| 
     .commentContainer 
     %h4.desc 
     %strong 
     =link_to (comment.user.Username),user_path(comment.user.user_id) 
     = comment.content 

Die Linie

- pin.comments.each do |comment| 

Werden alle Kommentare zu diesem Stift gehör zeigen, unabhängig vom Benutzer. Dann greifen Sie auf die Daten des Benutzers zu, indem Sie die Beziehung mit dem darin enthaltenen Kommentar festlegen.

(comment.user.Username) 

Stellen Sie außerdem sicher, dass alle Beziehungen in beide Richtungen gehen.

Pin.rb

has_many :comments 

User.rb

has_many :comments 
+0

Wenn ich versuche, dass ich eine nicht definierte Methode Fehler: nicht definierte Methode Kommentare zu # Ein weiterer Neuling Fehler, aber ich don Ich weiß nicht, was den Fehler verursacht. Warum funktioniert es, wenn ich 'pin.user.comments' einsetze, aber nicht wenn ich' pin.comments' verwende? – BigL

+0

Können Sie überprüfen, ob die PIN-ID beim Speichern des Kommentars gespeichert wird? Wie gibt es Daten in der Spalte db? –

+0

Ja, ich werde die ursprüngliche Frage bearbeiten, um dies zu zeigen – BigL

Verwandte Themen