2016-09-05 3 views
0

Я создаю форум. Я успешно создал модель Post, представляющую сообщения в html-представлении с электронной почтой пользователя и временем создания. Я также создал модель комментариев для ответа на сообщения. Я слежу за учебным пособием и понимаю большую часть его, но теперь теряюсь, получая значения пользователя и created_at комментариев из базы данных, чтобы я мог их отображать. Несмотря на то, что я сделал это с помощью модели post, это отличается от того, что я использую частичные элементы, отображаемые в представлении show html с контроллера Post, и меня смущает, что как сообщение, так и комментарии отображаются в представлении show post controller. (т. е. комментарии не имеют собственного представления). Я новичок. Любая помощь будет оценена по достоинству. Спасибо.Как получить пользователя, опубликовавшего комментарий и время его создания из базы данных, чтобы я мог представить его на вид

routes.rb

Rails.application.routes.draw do 
    devise_for :users 

    resources :posts do 
     resources :comments 
    end 

    root 'posts#index' 
end 

миграции для create_comments

class CreateComments < ActiveRecord::Migration[5.0] 
    def change 
     create_table :comments do |t| 
      t.text :comment 
      t.references :post, foreign_key: true 
      t.references :user, foreign_key: true 

      t.timestamps 
     end 
    end 
end 

comments_controller.rb

class CommentsController < ApplicationController 

    def create 
     @post = Post.find(params[:post_id]) 
     @comment = @post.comments.create(params[:comment].permit(:comment)) 
     @comment.user = current_user 

    if @comment.save 
     redirect_to post_path(@post) 
    else 
     render 'new' 
    end 
    end 
end 

_form.html.haml

= simple_form_for([@post, @post.comments.new]) do |f| 
    = f.input :comment 
    = f.submit 

модели/comment.rb

class Comment < ApplicationRecord 
    belongs_to :post 
    belongs_to :user 
end 

show.html.haml

#post_content 
    %h1= @post.title 

    - if user_allowed_post 
     = link_to "Delete", post_path(@post), method: :delete, data: {  confirm: "Are you sure you want to delete this?"}, class: "button" 
     = link_to "Edit", edit_post_path(@post), class: "button" 
    - else 


    %br 
    %br 
    %br 
    %p= @post.content 
    %p 
     Published 
     = time_ago_in_words(@post.created_at) 
     by 
     = @post.user.email 

    #comments 
     %h2 
      - if @post.comments.size == 1 
       = @post.comments.size 
       Comment 
      - else 
       = @post.comments.size 
       Comments 


     = render @post.comments 


     %h3 Reply to thread 
     = render "comments/form" 

Позвольте мне знать, если вам нужны любые другие файлы или информации.

+0

'@comment = @ post.comments.create (params [: comment] .permit (: comment))' что делает эта строка? попробуйте этот '@comment = @ post.comments.create (params.require (: comment) .permit (: post_id) .merge! (user_id: current_user.id))' И, попробуйте в 'rails console' какие данные на самом деле сохраняется в db. – dp7

+0

Извините, я задал неправильный вопрос, я подумал, что это проблема, но это немного другое, просто отредактировал вопрос, перечитайте его, если у вас есть время, thnx – koz

+0

Если вы показываете действие 'show' из' PostsController ', то вы должны были определить' @ post' и чуть ниже, чтобы вы могли иметь коллекцию комментариев для этого сообщения, используя '@comments = @ post.comments'. Из вашего представления вы можете отобразить частичное, например:' render @ comments' – dp7

ответ

0

Местная переменная comment будет доступна вам в вашем частичном _comment.html.haml, когда вы укажете = render @post.comments.

Вы должны быть в состоянии сделать = comment.user и = comment.created_at в частичном.