Итак, если у меня есть таблица many_to_many с только идентификаторами в ней, и я хочу ссылаться на нее в другой модели, как бы я это сделал?Ruby on Rails - Ссылка на отношения many_to_many
Так что в модели, которая называется Rating, я хочу сказать, что она связана с обоими вещами в ассоциации, в данном случае с курсом и учебником. Таким образом, рейтинг определяется учебником и курсом. Должен ли я добавить два атрибута id в Rating, которые ссылаются на оба? Должен ли я добавлять идентификатор в many_to_many, а затем иметь атрибут ID в таблице рейтинга? Или есть что-то еще, что я могу сделать?
UPDATE:
Так вот мой ERD до сих пор. Вы можете игнорировать вещи со студентами и профессорами. С правой стороны стол, который я сделал в соответствии с @RichPeck. Я смущен тем, как создавать записи. Например, я создаю курс.
course = Course.new(params)
Я тогда сделать это, чтобы сделать учебник.
textbook = course.textbooks.build(params)
Теперь, когда я course.textbooks
, он перечисляет учебник я только что сделал, но когда я textbook.courses
я получаю пустой список. Кроме того, после сохранения их и выхода из оболочки, а затем повторного открытия, обе команды reutnr пустым списком. Теперь это потому, что таблица соединений, CourseTextboks, пуста. Почему рельсы не добавляют туда запись? Нужно ли мне что-то делать?
Вот соответствующие файлы:
CreateCourseTextbooksMigration
class CreateCourseTextbooks < ActiveRecord::Migration
def change
create_table :course_textbooks do |t|
t.references :course, index: true
t.references :textbook, index: true
t.timestamps
end
end
end
CreateTextbookMigration
class CreateTextbooks < ActiveRecord::Migration
def change
create_table :textbooks do |t|
t.string :title
t.string :authors
t.string :edition
t.float :price
t.string :isbn
t.text :description
t.string :image_url
t.date :published
t.timestamps
end
end
end
CreateCourseMigration
class CreateCourses < ActiveRecord::Migration
def change
create_table :courses do |t|
t.string :title
t.string :letters
t.integer :number
t.timestamps
end
end
end
И мод ELS:
курс
class Course < ActiveRecord::Base
has_many :student_courses
has_many :students, through: :student_courses
has_many :professor_courses
has_many :professors, through: :professor_courses
has_many :textbook_courses
has_many :textbooks, through: :textbook_courses
validates_presence_of :title, :letters, :number
end
Учебник
class Textbook < ActiveRecord::Base
has_many :textbook_courses
has_many :courses, through: :textbook_courses
end
CourseTextbook
class CourseTextbook < ActiveRecord::Base
belongs_to :course
belongs_to :textbook
has_many :rating_course_textbooks, :class_name => "RatingCourseTextbook"
has_many :ratings, :through => :rating_course_textbooks
validates_presence_of :course
end
Можете ли вы помочь мне, ребята?
UPDATE2:
Я понял это после того, как примерно через полчаса поиска и обращать больше внимания на SQL сгенерированного при создании объектов .. Так что, когда вы делаете course.build
он просто возвращает объект и как-то ссылки это, но не через таблицу соединений. Я узнал, что вы должны сохранить курс НЕ нового профессора или просто использовать create.
Это то, что происходит
>>> course = Course.create(params)
# INSERT into courses table
>>> professor = course.build(params)
>>> professor.save
# INSERT into professors table
>>> course.professors
# [Professor {id:1, blah}]
>>> professor.courses
# []
И это то, что теперь работает
>>> course = Course.create(params)
# INSERT into courses table
>>> professor = course.build(params)
>>> course.save
# INSERT into professors table
# INSERT into professor_courses table
>>> course.professors
# [Professor {id:1, blah}]
>>> professor.courses
# [Course {id:1, blah}]
яй! Теперь просто чтобы увидеть, если все это работает с другими моими моделями, как RatingsCourseTextbooks
Update3 Таким образом, после возни на некоторое время, я обнаружил, что я делал это слишком сложно. В рейтинге может быть только один CourseTextbook, поэтому мне не нужна другая таблица соединений. Я просто добавил идентификатор CourseTextbook для рейтинга.
Спасибо за вашу поддержку
лучшее объяснение. –
Это очень хорошее объяснение полиморфных отношений, и я ценю это, потому что это ценные знания, но я считаю, что вы либо неправильно поняли, либо я плохо общался, но то, что я хочу, - это рейтинг для учебника для каждого курса, в котором находится учебник. что я хочу рейтинги как для учебника, так и для курса. Я не оцениваю курсы. – adamk33n3r
Вы можете использовать 'has_many: through' за то, что вы опубликовали - позвольте мне написать его вам! –