Как объявить конкретный ключ для ассоциации has_many с параметром: through? - PullRequest
1 голос
/ 14 августа 2010

У меня есть ассоциация:
у автора много книг; и у книги много авторов;
Мне нужно использовать: через опцию (через таблицу с именем 'Relations', есть два столбца с именем 'left_id' (используется как author_id) и 'right_id' (используется ad book_id);


class Relation < ActiveRecord::Base
  belongs_to :books
  belongs_to :authors
end

class Author < ActiveRecord::Base
  has_many :relations, :foreign_key => 'left_id'
  has_many :books, :through => :relations
end

В консоли:


> author = Author.new
> author.books 
#  => Error: no such column: relations.book_id

Итак, как я могу указать 'book_id' для 'right_id'? (Есть ли какая-либо опция, такая как 'foreign_key'?)

Ответы [ 2 ]

0 голосов
/ 14 августа 2010

Вы должны использовать foreign_key также в модели Relation, поэтому для own_to также есть foreign_key. Точнее, это то, что вам нужно:

class Relation < ActiveRecord::Base
  belongs_to :book, :foreign_key => :left_id
  belongs_to :author, :foreign_key => :right_id
end

и другие модели должны быть:

class Book < ActiveRecord::Base
  has_many :relations, :foreign_key => :left_id
  has_many :authors, :through => :relations
end


class Author < ActiveRecord::Base
  has_many :relations, :foreign_key => :right_id
  has_many :books, :through => :relations
end
0 голосов
/ 14 августа 2010

Я не знаю о foreign_id и не могу найти ничего в Google.Как насчет этого?

has_many :relations, :local_key => 'left_id', :foreign_key => 'right_id'
...