#ruby-on-rails #ruby #activerecord #has-many-through
#ruby-on-rails #ruby #activerecord #имеет много сквозных
Вопрос:
Я работаю с Ruby on Rails (в частности, с ActiveRecord) и пытаюсь решить, является ли хорошей идеей связывать мои модели с использованием нескольких уровней.
class Student < ActiveRecord::Base
has_many :student_sections
has_many :sections, :through => :student_sections
has_many :courses, :through => :sections
end
Кажется, что это сработало бы, но у меня нет большого опыта в ActiveRecord. Есть ли какая-либо причина не делать этого?
Ответ №1:
Это нормально, но вы должны иметь в виду, что ассоциация courses фактически является только ассоциацией ‘get’ (в отличие от ‘get и set’). Я имею в виду, что вы можете сказать
@student.courses
(после исправления neo), чтобы получить список курсов, но вы не можете сделать
@student.courses << @курс
поскольку в rails нет информации о разделе, необходимой для выполнения необходимых соединений между студентом и курсом.
Ответ №2:
вам нужно добавить:атрибут источника
has_many :sections, :through => :student_sections, :source => 'your_source'
Комментарии:
1. Зачем ему нужно добавлять исходный код? В этом случае Rails должен иметь возможность автоматически определять ассоциацию.
2. в rdoc написано: «Указывает имя исходной ассоциации, используемое has_many : через запросы. Используйте это только в том случае, если имя не может быть выведено из ассоциации. has_many :subscribers, :through => :subscriptions будут искать либо :subscribers, либо :subscriber при подписке, если не указан :source.»
3. Моя модель настроена так, что мне не нужно использовать:source, но спасибо.