доступ по запросу активной записи с записью таблицы соединений в отношении has_many: through - PullRequest
1 голос
/ 05 марта 2012

У меня есть таблица предметов, регионов и категорий, к которой они присоединяются через таблицу item_region и item_category. Их отношения следующие:

class Item < ActiveRecord::Base    
  has_many :item_region    
  has_many :region, :through => :item_region    
  has_many :item_category    
  has_many :category, :through => :item_category    

class Region < ActiveRecord::Base    
  has_many :category    
  has_many :item, ::through => :item_category    

class ItemRegion < ActiveRecord::Base    
  belongs_to :item    
  belongs_to :region    
end    

class Category < ActiveRecord::Base    
  has_many :item, :through => :item_category    
  has_many :item_category    

class ItemCategory < ActiveRecord::Base    
  belongs_to :item    
  belongs_to :category    
end     

Я хочу найти все поля item, category_name и region_name из region_id, category_id иitem_id с использованием таблицы соединений.

Спасибо.

1 Ответ

0 голосов
/ 06 марта 2012

Надеюсь, я правильно понял.Что касается получения необходимого предмета, то желаемый регион и категория из него.

item = Item.find(item_id)
region = item.regions.where(:id => region_id) 
category = item.categories.where(:id => category_id)

Еще одно предложение, вам лучше предоставить форму множественного числа для ваших ассоциаций.object.collections интуитивно понятно для ассоциации has_many.Обратите внимание, что Rails будет по-прежнему работать с приведенным выше кодом, но это не следует принципу CoC (соглашение о конфигурации) Rails.Если вы будете следовать соглашению, вам не придется делать много настроек.

Проверьте примеры здесь http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many

Лично я бы предпочел, чтобы мои ассоциации в модели предметов были:

class Item < ActiveRecord::Base    
  has_many :item_regions    
  has_many :regions, :through => :item_regions    
  has_many :item_categories    
  has_many :categories, :through => :item_categories   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...