好的,我仍然是铁轨上的红宝石的新手,试图学习我的方式。我有两个模型(用户模型和评论模型)。基本上,用户有一个简单的配置文件,其中包含“关于我”部分和同一页面上的照片部分。用户必须登录才能对其他用户个人资料发表评论。
我的用户模型
class User < ActiveRecord::Base
attr_accessible :email, :name, :username, :gender, :password, :password_confirmation
has_secure_password
has_many :comments
.
.
end
我的评论模型
class Comment < ActiveRecord::Base
belongs_to :user
attr_accessible :content
.
.
end
在我的评论表中,我有一个user_id
列,用于存储其个人资料已被评论的用户的ID,以及一个commenter_id
列,用于存储用户在个人资料上发表评论的ID。
评论表
<%= form_for([@user, @user.comments.build]) do |f| %>
<%= f.text_area :content, cols: "45", rows: "3", class: "btn-block comment-box" %>
<%= f.submit "Comment", class: "btn" %>
<% end %>
我的评论控制器
class CommentsController < ApplicationController
def create
@user = User.find(params[:user_id])
@comment = @user.comments.build(params[:comment])
@comment.commenter_id = current_user.id
if @comment.save
.........
else
.........
end
end
end
这可以很好地在数据库中存储user_id
和commenter_id
。在显示页面上显示用户评论时出现问题。我想获得评论特定个人资料的用户的姓名。
在我的用户控制器中
def show
@user = User.find(params[:id])
@comments = @user.comments
end
我想从commenter_id
获取用户的名称,但在尝试undefined method 'commenter' for #<Comment:0x007f32b8c37430>
之类的内容时,它会不断抛出错误comment.commenter.name
。但是,comment.user.name
工作正常,但它不会返回我想要的内容。我猜测没有正确的关联。
我需要帮助在模型中获取正确的关联,以便从commenter_id获取名称。
我的上一个问题,我如何在评论表中发现错误?它不像通常的form_for(@user)
那样@user.errors.any?
。
的routes.rb
resources :users do
resources :comments, only: [:create, :destroy]
end
答案 0 :(得分:0)
在你的模特中尝试这样的事情
class User < ActiveRecord::Base
has_many :received_comments, :class_name => "Comment", :foreign_key => "user_id"
has_many :given_comments, :class_name => "Comment", :foreign_key => "commenter_id"
end
class Comment < ActiveRecord::Base
belongs_to :user # comment about profile
belongs_to :commenter, :class_name => "User", :foreign_key => "commenter_id"
end
结帐:http://guides.rubyonrails.org/association_basics.html
你可以在has_many集合中提出更好的命名,收到并给出的是我在短时间内可以做的最好的事情:)
注意:在许多情况下,foreign_key是选项,将其留在上面 - 我认为它有助于清晰