Объединение нескольких моделей Rails - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть приложение для рельсов со следующими моделями:

User (id)
Version (id, post_id, creator_id)
Post (id)

Пока что установка выглядит следующим образом:

User.rb:

has_many :versions

Version.rb:

belongs_to :creator, :class_name => "User"
belongs_to :post

post.rb:

has_many :versions

Теперь я хотел бы связать пользователя с сообщениями, которые он имеет, через таблицу версий, и, что еще хуже, это соединение должно называться вопросами. Я думал что-то вроде этого:

Добавлено в User.rb:

has_many :questions, :class_name => "Post", :source => :post, :through => :versions

Проблема в том, что это не работает и, вероятно, не должно, так как не знает, как называется ключ пользователя в таблице версий.

Сообщение об ошибке:

SQLite3 :: SQLException: такого столбца нет: versions.user_id: SELECT COUNT (*) FROM "posts" INNER JOIN "версии" ON "posts". "Id" = "версии". "Post_id" WHERE "версии" . "user_id" = 1

Я в растерянности, помогите!

Примечание: Единственное отношение, которое не работает, является окончательным users <==> posts a.k.a users.questions

1 Ответ

2 голосов
/ 20 ноября 2011

Эта настройка должна работать для вас:

user.rb

has_many :versions, :foreign_key => 'creator_id'
has_many :questions, :through => :versions

version.rb

belongs_to :creator, :class_name => "User"
belongs_to :question, :class_name => "Post", :foreign_key => 'post_id'

post.rb

has_many :versions

Теперь вы можете получить доступ к таким вопросам: User.first.questions

...