ActiveRecord_Associationundefined #<Post::ActiveRecord_Associations_CollectionProxy:>s_CollectionProxy 的方法“评论”
ActiveRecord_Associationundefined method `reviews' for #<Post::ActiveRecord_Associations_CollectionProxy:>s_CollectionProxy
我的应用程序中有 3 个模型,即用户、post 和评论。他们是这样关联的
- 一个用户可以拥有 posts
- 一个posts属于一个用户
- 一个post可以有很多评论
- 评论属于用户
帖子模型
class Post < ApplicationRecord
belongs_to :user
has_many :comments, dependent: :destroy
validates :title, presence: true
validates :body, presence: true
end
用户模型
class User < ApplicationRecord
before_create { generate_token(:auth_token) }
before_save { self.email = email.downcase }
has_secure_password
has_many :posts
validates :name, presence: true
validates :email, presence: true, uniqueness: true
validates :password, confirmation: true
validates :password_confirmation, presence: true, unless: Proc.new { |a| !a.new_record? && a.password.blank? }
def send_password_reset
generate_token(:reset_password_token)
self.reset_password_sent_at = Time.zone.now
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
end
审核模型
class Review < ApplicationRecord
belongs_to :user
end
用户控制器 - 显示方法
def show
@user = User.find(params[:id])
@posts = @user.posts
@reviews = @posts.reviews //This line shows error
end
我认为我关联这些模型的方式有问题。
我想用 post 显示对 post 的评论。我从 posts 用户控制器显示....但是当我尝试以相同的方式显示评论时。我
我已经手动离开并在 rails 控制台中对 post 发表了评论。
根据架构
审核table
create_table "reviews", force: :cascade do |t|
t.string "comment"
t.string "user_id"
t.string "post_id"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
代码中可以看到两个问题。
1 - 您还没有在评论模型中定义 post 和评论之间的关系。
class Review < ApplicationRecord
belongs_to :user
belongs_to :post
end
2 - 您正试图从 post 的关系中获取评论。如果您想获得给定用户的所有评论。你可能需要
def show
@user = User.find(params[:id])
@posts = @user.posts
@reviews = @user.reviews
end
或者您可能需要通过
为视图中的每个 post 加载评论
post.reviews
我的应用程序中有 3 个模型,即用户、post 和评论。他们是这样关联的
- 一个用户可以拥有 posts
- 一个posts属于一个用户
- 一个post可以有很多评论
- 评论属于用户
帖子模型
class Post < ApplicationRecord
belongs_to :user
has_many :comments, dependent: :destroy
validates :title, presence: true
validates :body, presence: true
end
用户模型
class User < ApplicationRecord
before_create { generate_token(:auth_token) }
before_save { self.email = email.downcase }
has_secure_password
has_many :posts
validates :name, presence: true
validates :email, presence: true, uniqueness: true
validates :password, confirmation: true
validates :password_confirmation, presence: true, unless: Proc.new { |a| !a.new_record? && a.password.blank? }
def send_password_reset
generate_token(:reset_password_token)
self.reset_password_sent_at = Time.zone.now
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
end
审核模型
class Review < ApplicationRecord
belongs_to :user
end
用户控制器 - 显示方法
def show
@user = User.find(params[:id])
@posts = @user.posts
@reviews = @posts.reviews //This line shows error
end
我认为我关联这些模型的方式有问题。 我想用 post 显示对 post 的评论。我从 posts 用户控制器显示....但是当我尝试以相同的方式显示评论时。我
我已经手动离开并在 rails 控制台中对 post 发表了评论。
根据架构
审核table create_table "reviews", force: :cascade do |t|
t.string "comment"
t.string "user_id"
t.string "post_id"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
代码中可以看到两个问题。
1 - 您还没有在评论模型中定义 post 和评论之间的关系。
class Review < ApplicationRecord
belongs_to :user
belongs_to :post
end
2 - 您正试图从 post 的关系中获取评论。如果您想获得给定用户的所有评论。你可能需要
def show
@user = User.find(params[:id])
@posts = @user.posts
@reviews = @user.reviews
end
或者您可能需要通过
为视图中的每个 post 加载评论 post.reviews