Я пытаюсь понять синтаксис / мотивацию хэша опций ввода в ассоциациях has_many и own_to.(вопрос внизу)
Скажем, у меня есть две таблицы, пользователи и сообщения.у пользователя много постов, а пост принадлежит пользователю.Из того, что я понимаю, можно настроить ассоциации следующим образом:
(в модели пользователя)
has_many(:posts,
primary_key: :id,
foreign_key: :user_id, #this makes me think SQL is querying
#User.user_id, an invalid field
class_name: "Post")
(в модели Post)
belongs_to(:user,
primary_key: :id,
foreign_key: :user_id,
class_name: "User")
Мой (ые) вопрос (ы) заключается в следующем: Как я могу интуитивно понять, почему функции own_to и has_many реализованы таким образом?то есть, почему не следует ожидать, что Foreign_key изменится при изменении того, какую связь вы определяете?Потому что, наивно, я ожидал бы, что ассоциации будут определены с различными внешними ключами, в зависимости от того, из какой таблицы исходит ваш запрос (а именно таблица class_name).Это просто вопрос соглашения?
Я посмотрел документы для has_many / own_to и думаю, что понимаю, как они реализованы, но я до сих пор не понимаю / почему / это реализовано именно так.Я чувствую, что поддержание постоянного внешнего ключа, независимо от того, какую таблицу вы запрашиваете, запутывает то, что происходит на уровне SQL.(но я надеюсь, что я просто упускаю что-то глупое)
edit: для ясности, это соединение, которое, как я наивно думал, имело больше смысла:
в модели пользователя
has_many(:posts,
primary_key: :user_id, #because querying post table so treat this column
#as a primary key
foreign_key: :id, #because users is the 'secondary' table,
#:id should be foreign
class_name: "Post"
)
в модели Post
belongs_to(:user,
primary_key: :id, #because querying User table, treat this as the
#primary key
foreign_key: :user_id, #because posts is the 'secondary' table we are
#comparing to, :user_id should be foreign
class_name: "User")