Slechte oefening om modelassociaties in uw model te benoemen?

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

zijn er nadelen waar ik dit niet zie? of een betere manier om dit doel te bereiken?

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

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

2 antwoord

Een andere is door de klasse op te geven (zie de has_many opties docs ):

has_many :items, :class_name => "CategoryItem"

Ik zie echter geen grote problemen met uw manier van doen.

De enige waarschuwing is dat alles dat reflectief omgaat met de associaties (bijvoorbeeld een documentatietool) de 'echte' naam zou gebruiken, niet de aanvullende methode. Geen big deal, maar iets om op te letten.

2
toegevoegd

Wanneer je schrijft:

has_many :category_items

Rails weet automatisch te zoeken naar het CategoryItem-model. Maar je bent vrij om de associatienaam en de klasse waarnaar het verwijst te ontkoppelen

has_many :items, :class_name => "CategoryItem" 
1
toegevoegd