我正在为我的帖子创建评论,所有作品,但我不知道如何显示谁撰写评论 我正在尝试这个:
class User < ActiveRecord::Base
has_many :posts
has_many :reviewers, :class_name => 'Post', :foreign_key => 'reviewer_id'
end
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :category
has_many :reviews
belongs_to :reviewers, class_name: 'User', :foreign_key => 'reviewer_id'
default_scope -> { order('created_at DESC') }
end
class Review < ActiveRecord::Base
belongs_to :post
belongs_to :user
end
class ReviewsController < ApplicationController
def new
@post = Post.find(params[:post_id])
@review = @post.reviews.new(post_id:params[:post_id])
end
def create
@post = Post.find(params[:post_id])
@review = @post.reviews.build(review_params)
if @review.save
flash[:success] = "Ваш отзыв добавлен"
redirect_to post_path @post
else
render 'new'
end
end
private
def review_params
params.require(:review).permit(:post_id, :body, :reviewer_id).merge(:reviewer_id => current_user.id)
end
end
和我的观点
<% @post.reviews.each do |review| %>
<p>
<strong>reviewer:</strong>
<%= review.reviewer.email %>
</p>
<p>
<strong>review:</strong>
<%= review.body %>
</p>
<% end %>
我的迁移
class CreateReviews < ActiveRecord::Migration
def change
create_table :reviews do |t|
t.text :body
t.references :post, index: true
t.references :reviewer, index: true
t.timestamps
end
end
end
但是给出了错误未定义的方法`reviewer'for# 帮助请dsfsdf
答案 0 :(得分:2)
我认为你有一个复数问题:
帖子有许多审核人员(每次审核一次)的评论。但是您将外键存储在帖子中,因此您编写了有问题的行:
belongs_to :reviewers, class_name: 'User', :foreign_key => 'reviewer_id'
这里的问题是它是一个带有复数名称的单数关联。
我认为你试图在这里说一个
class Post
have_many :reviewers, class_name: 'User', through: :reviews
end
但是,当您尝试从评论中访问评论者时,您真正需要的是添加:
class Review
belongs_to :reviewer, class_name: 'User'
end
然后,您可以按预期访问评论中的评论者:
<% @post.reviews.each do |review| %>
<p>
<strong>reviewer:</strong>
<%= review.reviewer.email %>
</p>
<p>
<strong>review:</strong>
<%= review.body %>
</p>
<% end %>
用户中也有错误:
has_many :reviewers, :class_name => 'Post', :foreign_key => 'reviewer_id'
应该是:
has_many :reviews, :foreign_key => 'reviewer_id'
答案 1 :(得分:0)
您需要使用.user
。检查模型中的belongs_to
。
Review.first.user
答案 2 :(得分:0)
正如之前的海报指出的那样,您的用户关联评论是:用户,因此您的视图应该如下所示:
<% @post.reviews.each do |review| %>
<p>
<strong>reviewer:</strong>
<%= review.user.name unless review.user.nil? %>
</p>
<p>
<strong>review:</strong>
<%= review.body %>
</p>
<% end %>