1

パブリックgithubアプリケーション(ダウンロードするにはhttps://github.com/greenplastik/testappを参照)をセットアップして、タイプを指定している問題を解決します結合モデルを介して、2つのモデル間の多対多の関連の側にあります。多対多の結合モデルの片側の型を結合モデルに設定する

考えると人とブックモデルとBook_Personがモデルに参加するには、私は、次の操作を行うことができるようにしたい:

@book = Book.first @ book.people#book.authors @ブック ために人々を示しています本のためbook.editors#リストエディタ型の人@ブック のための#リスト作成者型の人

のための本をリストし@person = Person.first @ person.books#

このアプリは、Googleの指示に沿って部分的にセットアップされました。私のtestappのREADMEには、これらの指示へのリンクがあります。

矛盾と誤植を取り除くためにできる限り最善の努力をしました。私はそれを働かせることはできません。

ご協力いただければ幸いです。私は簡単にあなたの最後にテストするためにsqliteデータベースを含めました。

答えて

0

...何を達成するための最良の方法私は、私は完全なソリューションやテスト1どちらを投稿する時間を持っていない申し訳ないが、これは、少なくとも右のトラックにあなたを置く必要があります探しているのは、多相関係で使用される単一テーブル継承です。

私は一人の人間が、すべての3つの役割を埋めることができればしかし、これは次善のだろう

class Person < ActiveRecord::Base 
    has_many :book_people 
    has_many :books, :through => :book_people 
end 


class Author < Person 
end 

class Editor < Person 
end 

class BookPerson < ActiveRecord::Base 
    belongs_to :person, :polymorphic => true 
    belongs_to :book 
end 

class Book < ActiveRecord::Base 
    has_many :book_people 
    has_many :people, :through => :book_people 
    has_many :authors, :through => :book_people, :source => :person, :source_type => "Author" 
    has_many :editors, :through => :book_people, :source => :person, :source_type => "Editor" 
end 

である人物

のサブクラスであることを再定義する著者と編集者をお勧めしたいです。おそらく、3つのSTI名に同じSTI名を使用することによって、それを回避する方法があります。しかし、あなたはすべての著者の質問をするのが難しくなります。

+0

残念ながら、 '@book = Book.first'、次に '@ book.people'を実行すると、ソリューションで次のエラーが発生しました: 'ActiveRecord :: HasManyThroughAssociationPolymorphicError:has_many:through association' Book#people '多型オブジェクト 'Person#person'上で。 ' – GreenPlastik

+0

私が免責事項で述べたように、私はそれを正確にテストする時間がなかった。それを機能させる方法はありますが、このソリューションのものとはあまり離れているわけではありませんが、それまではそれを試す時間はありません。 – EmFi

+0

私はあらゆる場所をチェックし、これに関するドキュメントとソースコードを読んでみました。喜びはありません。何か助けてもらえますか? – GreenPlastik

関連する問題