2010-05-15 3 views
3

Мне просто интересно, можно ли «переименовать» объединение в Rails. Давайте предположим, что:Атрибут атрибутов 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 

Возможно ли такое сокращение?

Спасибо заранее!

ответ

4

Вы могли бы добиться этого с помощью :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 docs для больше информации.

+0

Благодарим за быстрый ответ, это было именно то, что мне было нужно. Просто не знал, как это сделать :) – Dr1Ku

Смежные вопросы