Плохая практика переименовывать ассоциации моделей в вашей модели? - PullRequest
1 голос
/ 28 октября 2011
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 ]

2 голосов
/ 28 октября 2011

Другой способ - указать класс (см. has_many документацию по опциям ):

has_many :items, :class_name => "CategoryItem"

Однако я не вижу каких-либо серьезных проблем с вашим способом.

Единственное предостережение: все, что связано с ассоциативными отражениями (например, инструмент документации), будет использовать «настоящее» имя, а не дополнительный метод.Не большое дело, но что-то, о чем нужно знать.

1 голос
/ 28 октября 2011

Когда вы пишете:

has_many :category_items

Rails автоматически знает, как искать модель CategoryItem. Но вы можете разделить имя ассоциации и класс, на который она указывает

has_many :items, :class_name => "CategoryItem" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...