在模型中重命名模型关联的不良做法?

时间:2011-10-27 20:43:40

标签: ruby-on-rails ruby activerecord

class TransactionItem < ActiveRecord::Base
  belongs_to :transaction
end 

class Transaction < ActiveRecord::Base
  has_many :transaction_items

  def items
    self.transaction_items
  end
end



class CategoryItems < ActiveRecord::Base
  belongs_to :category
end 

class Category< ActiveRecord::Base
  has_many :category_items

  def items
    self.category_items
  end
end

努力简化具有Objects

Items的界面

我有没有看到这个缺点? 或更好的方式来实现这一目标?

category = Category.first
category.items
# instead of
# category.category_items

transaction = Transaction.first
transaction.items
# instead of
# transaction.transaction_items

2 个答案:

答案 0 :(得分:2)

另一种方法是指定类(参见has_many options docs):

has_many :items, :class_name => "CategoryItem"

但是,我认为你没有遇到任何重大问题。

唯一需要注意的是反复处理关联的任何事情(例如,文档工具)将使用“真实”名称,而不是其他方法。没什么大不了的,但需要注意的事情。

答案 1 :(得分:1)

当你写:

has_many :category_items

Rails自动知道查找Category Item模型。但是你可以自由地将关联名称和它指向的类分开

has_many :items, :class_name => "CategoryItem"