Я создаю форум. Я успешно создал модель 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"
Позвольте мне знать, если вам нужны любые другие файлы или информации.
'@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
Извините, я задал неправильный вопрос, я подумал, что это проблема, но это немного другое, просто отредактировал вопрос, перечитайте его, если у вас есть время, thnx – koz
Если вы показываете действие 'show' из' PostsController ', то вы должны были определить' @ post' и чуть ниже, чтобы вы могли иметь коллекцию комментариев для этого сообщения, используя '@comments = @ post.comments'. Из вашего представления вы можете отобразить частичное, например:' render @ comments' – dp7