当与同一模型有两个关系时,Rails命名约定

时间:2012-04-25 12:33:00

标签: ruby-on-rails mongodb coding-style naming-conventions mongoid

我的问题更多地与命名约定相关,而不是编程。

我们假设一个应用程序,用户可以在其中创建新文章(因此他们是这些文章的所有者),并且您可以在其中添加文章“编辑者”,他们只能更新文章内容。

class User
  include Mongoid::Document
  has_many :articles # as owner of the articles
  has_and_belongs_to_many :articles # as editor of the articles
end

class Article
  include Mongoid::Document
  belongs_to :user
  has_and_belongs_to_many :editors, :class_name => 'User'
end

我想知道的是我应该如何在我的用户模型中调用文章关联。我的意思是,一篇文章有​​一个作者和编辑,这对我来说似乎是强有力的命名惯例,但是用户有他创建的文章和文章他是编辑。你会如何调用/命名/声明最后2个关联?

1 个答案:

答案 0 :(得分:3)

我会将其称为:edited_articles:authored_articles:owned_articles,或类似的直接名称。不要忘记向他们添加:class_name:foreign_key:through限定符。

更新

对于has_and_belongs_to_many关系,您需要一个连接表,默认情况下,该连接表是两个连接表的名称。例如。在你的情况下articles_users。在此表格中,您可能会有两个ID user_idarticle_id。这样rails就会自动连接你的模型。

has_and_belongs_to_many :editors, :class_name => 'User', :foreign_id => 'user_id'

当然,如果你在连接表中调用它editor_id,那么就使用它。相反,在用户方面也应该工作。