У меня есть три модели: модель пользователя, модель Post и модель комментариев. Пользователь может создать сообщение, а затем на странице показа публикации, есть список комментариев с формой для публикации комментария. Комментарий публикуется и отображается на странице показа сообщений. Я решил вставить комментарии внутри сообщений и оставить пользователей в покое. Вот мой routes.rb и каждый из моих моделейСтранная ошибка с ассоциацией belongs_to между комментарием и пользователем
resources :users, except: [:index]
ресурсов: должности, за исключением: [: индекс,: редактировать,: обновление] сделать ресурсы: комментарии только: [: создание,: уничтожить] конец
class User < ActiveRecord::Base
has_many :posts, dependent: :destroy
has_many :comments, foreign_key: "author_id"
class Post < ActiveRecord::Base
belongs_to :user
has_many :comments, dependent: :destroy
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :author, class_name: "User"
Моя проблема связана с ассоциацией между пользователем и комментарием (я считаю). На мой пост/шоу зрения, у меня есть следующий код:
<% if @comments.any? %>
<% @comments.each do |comment| %>
<p><%= comment.author_id %>: <%= comment.content %></p>
<% end %>
<% end %>
Этот код работает, например, он печатает следующий за комментарием (при условии, что пользователь, создавший это имеет идентификатор 15)
15 : это комментарий
Таким образом, для меня ясно, что он подбирает, кто его автор. НО ВОТ ВОПРОС: Когда я пытаюсь напечатать следующее:
<p><%= comment.author.full_name %>: <%= comment.content %></p>
Это дает мне это «Действие контроллера: Пойманное» ошибка:
«неопределенный метод` имя пользователя»для ноль: NilClass»
Не должно ли ассоциация подбирать для меня свойство full_name автора (пользователя)? Я знаю, что у меня что-то отсутствует, ЛЮБАЯ помощь очень ценится. Я также буду включать контроллер сообщений и контроллер комментариев прямо ниже. Мои сообщения контроллера показать действие:
def show
@post = Post.find(params[:id])
@comment = @post.comments.build
@comments = @post.comments
end
А вот мой комментарий контроллер создает действия следует моему сильному Params:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(comments_params)
if @comment.save
flash[:good] = "Your comment has been posted!"
redirect_to @post
else
flash[:bad] = "Sorry, your comment failed to post."
redirect_to @post
end
end
def comments_params
params.require(:comment).permit(:content, :author_id)
end
Кто-нибудь, пожалуйста, помогите мне! – Parker
Я думаю, вам нужно настроить внешний ключ, прежде чем вы сможете вызвать <% = comment.author.full_name%>, этот проект загружен в github? – mrvncaragay
У меня его нет на github, нет ... Где я должен установить внешний ключ? Я установил его в моей модели User, где я написал has_many: comments, foreign_key: «author_id» – Parker