Псевдоним атрибута Rails - PullRequest
3 голосов
/ 15 мая 2010

Мне было просто интересно, можно ли "переименовать" ассоциацию в Rails. Давайте предположим:

# An ActiveRecord Class named SomeModelASubModel (some_model_a_sub_model.rb)
class SomeModelASubModel < ActiveRecord::Base
  has_many :some_model_a_sub_model_items
end

# An ActiveRecord Class named SomeModelASubModelItem (some_model_a_sub_model_item.rb)
class SomeModelASubModelItem < ActiveRecord::Base
  belongs_to :some_model_a_sub_model
end

В этот момент вызов some_model.items, где some_model является экземпляром класса SomeModelASubModel, вызовет неопределенную ошибку метода.

Какова лучшая практика для этого, например, :

# With a method_alias or something, would it be possible to :
some_model = SomeModelASubModel.first # for instance
items = some_model.items

# For the reason stated, this doesn't work, one has to call :
items = some_model.some_model_a_sub_model_items

Возможна ли такая стенография?

Заранее спасибо!

1 Ответ

4 голосов
/ 15 мая 2010

Этого можно достичь, используя :items вместо :some_model_a_sub_model_items в качестве имени отношения и явно указав имя класса, на который вы ссылаетесь, используя параметр :class_name:

# An ActiveRecord Class named SomeModelASubModel (some_model_a_sub_model.rb)
class SomeModelASubModel < ActiveRecord::Base
  has_many :items, :class_name => "SomeModelASubModelItems"
end

См. ActiveRecord документы для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...