あなたのモデルのモデルの関連付けの名前を変更するのは間違っていますか?

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

In an effort to simplify the interface to Objects that have Items

私はこれに見ていない欠点がありますか?この目標を達成するにはそれとも良い方法ですか?

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

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

2 答え

もう1つは、クラスを指定することです( has_many オプションのドキュメント):

has_many :items, :class_name => "CategoryItem"

私はあなたのやり方に大きな問題は見ません。

唯一の注意点は、関連性を反映したもの(例えばドキュメンテーションツール)が、追加のメソッドではなく「本物の」名前を使用するものです。大したことではなく、認識すべきこと。

2
追加された

あなたが書くとき:

has_many :category_items

Railsは自動的にCategoryItemモデルを探すことを知っています。しかし、団体名とそれが指すクラスを自由に切り離すことができます

has_many :items, :class_name => "CategoryItem" 
1
追加された