2015-01-18 5 views
0

Я не могу понять подробное понимание следующей ассоциации рельсов.Ассоциации рельсов has_many через

has_many через has_and_belongs_to_many

Что это ассоциации делают и эффект на столе? пожалуйста, помогите

+0

Я полагаю, вы уже прочитали официальную документацию. http://guides.rubyonrails.org/association_basics.html –

ответ

0

Has_many в основном говорит, что одна вещь связана со многими, например, одна категория имеет много продуктов внутри. Belongs_to в основном наоборот, поэтому продукт относится к категории. Они позволяют извлекать данные из таблицы, которая ссылается на другую таблицу, например. Вы можете получить заголовок категории из таблицы продуктов для определенного продукта по этой ссылке. Это помогает?

+0

немного, но я спрашиваю о 1) has_many через 2) has_and_belongs_to_many –

+0

Смотрите, если это помогает: https://www.ruby-forum.com/topic/76825 и: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html –

0

От Choosing Between has_many :through and has_and_belongs_to_many

Rails предлагает два различных способа объявить многие-ко-многим между моделями. Простой способ заключается в использовании has_and_belongs_to_many, , который позволяет сделать ассоциацию непосредственно:

class Assembly < ActiveRecord::Base 
    has_and_belongs_to_many :parts 
end 

class Part < ActiveRecord::Base 
    has_and_belongs_to_many :assemblies 
end 

второй способ объявить многие-ко-многим является использование has_many: через. Это делает ассоциацию косвенно, через присоединиться модель:

class Assembly < ActiveRecord::Base 
    has_many :manifests 
    has_many :parts, through: :manifests 
end 

class Manifest < ActiveRecord::Base 
    belongs_to :assembly 
    belongs_to :part 
end 

class Part < ActiveRecord::Base 
    has_many :manifests 
    has_many :assemblies, through: :manifests 
end 

Самое простое правило заключается в том, что вы должны создать has_many : через отношения, если вам нужно работать с моделью отношений как независимое юридическое лицо , Если вам не нужно ничего делать с моделью отношений , может быть проще установить отношения has_and_belongs_to_many (хотя вам нужно запомнить , чтобы создать таблицу соединения в базе данных).

Вы должны использовать has_many: через, если вам нужны проверки, обратные вызовы, или дополнительные атрибуты в модели соединения.

Позвольте мне выделить наиболее важное предложение:

Самое простое правило заключается в том, что вы должны создать has_many: через отношения, если вам нужно работать с моделью отношений как самостоятельного субъекта. Если вам не нужно ничего делать с моделью отношений, может быть проще установить отношение has_and_belongs_to_many

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