Переопределение имени модели отношения has_many

#ruby-on-rails #activerecord

#ruby-on-rails #activerecord

Вопрос:

Было бы неплохо, если бы существовал более элегантный способ сделать это, учитывая эти модели:

 @forum_topic = ForumTopic.find(1)
@forum_topic.forum_sub_topics.each do |fst|  #it would be nicer if one could just type @forum_topic.sub_topics.each...
  #
end
  

Кажется излишним включать forum_ перед sub_topics, потому что я знаю, что имею дело с forum_topic. Я мог бы изменить название таблицы / модели на SubTopic, но это немного обобщенно и, возможно, может появиться где-нибудь в приложении. Есть ли способ переопределить имя методов, созданных на ForumTopic для ассоциации has_many?

Модели:

 class ForumTopic...
  has_many :forum_sub_topics
end

class ForumSubTopic...
end
  

Ах, ответ прямо здесь. Спасибо! 🙂
http://guides.rubyonrails.org/association_basics.html

Ответ №1:

Попробуйте это:

 has_many :sub_topics, :class_name => "ForumSubTopic"
  

Ссылка

ActiveRecord::Ассоциации::Методы классов has_many — смотрите в разделе Параметры

Ответ №2:

Да, вы можете указать любое желаемое имя ассоциации и по-прежнему указывать ей использовать ваш ForumSubTopic класс:

 class ForumTopic
  has_many :sub_topics, :class_name => "ForumSubTopic", :foreign_key => "forum_sub_topic_id"
end