Понимание:исходный вариант имеет один/имеет много сквозных рельсов

пожалуйста, помогите мне в понимании на

3 ответов


иногда, вы хотите использовать разные имена для разных организаций. Если имя, которое вы хотите использовать для ассоциации на модели, не совпадает с Ассоциацией на :through модель, вы можете использовать :source указать его.

Я не думаю, что пункт много яснее, чем в документах, поэтому вот пример. Предположим, у нас есть три модели, Pet, Dog и Dog::Breed.

class Pet < ActiveRecord::Base
  has_many :dogs
end

class Dog < ActiveRecord::Base
  belongs_to :pet
  has_many :breeds
end

class Dog::Breed < ActiveRecord::Base
  belongs_to :dog
end

в этом случае, мы выбрали пространство имен Dog::Breed, потому что мы хотим получить доступ к Dog.find(123).breeds как хорошая и удобная ассоциация.

теперь, если мы хотим создать


позвольте мне расширить этот пример:

class User
  has_many :subscriptions
  has_many :newsletters, :through => :subscriptions
end

class Newsletter
  has_many :subscriptions
  has_many :users, :through => :subscriptions
end

class Subscription
  belongs_to :newsletter
  belongs_to :user
end

С помощью этого кода Вы можете сделать что-то вроде Newsletter.find(id).users чтобы получить список подписчиков бюллетеня. Но если вы хотите быть яснее и иметь возможность вводить Newsletter.find(id).subscribers вместо этого вы должны изменить класс Newsletter следующим образом:

class Newsletter
  has_many :subscriptions
  has_many :subscribers, :through => :subscriptions, :source => :user
end

вы переименовании


самый простой ответ:

- Это имя отношения в таблице посередине.