在Rails 3模型中创建命名关系

时间:2011-09-24 19:48:02

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我正在尝试学习Rails,我正在努力理解如何使用ActiveRecord组件声明自我关系。

如果我有这样的话:

class Comment < ActiveRecord::Base
    has_many :comments
    belongs_to :comments
end

作为评论的回复和评论的父母的相关评论,如果它们具有相同的名称,我应该如何访问它们?我不能只做comment.comments,他们需要有不同的名字。

感谢。

3 个答案:

答案 0 :(得分:3)

首先,belongs_to是一个单数关联,所以它将是:

belongs_to :comment

......你没有名字冲突。

但是对于确实存在冲突的情况,您始终可以重命名关系,例如:

has_many :comments
has_many :recent_comments, :class_name => 'Comment', :limit => 10, :order => 'id DESC'

查看关联in the docs选项的更多示例。

答案 1 :(得分:0)

您需要对belongs_to关联使用单数:

    belongs_to :comment

看起来您正在尝试创建Comment s的树状结构。你可能想看看像paginary这样的宝石。

答案 2 :(得分:0)

传递给has_many方法的第一个符号是您要指定的名称。 Rails使用约定优于配置原则,因此它从中获取相关类的名称,但您可以像这样指定它:

has_many :rel, :class_name => "Class"