1

たとえば、この状況を考えてみましょう。Railsでの適切な関連付けに関する質問

あなたは3つのモデルがあります: - 詩

  • 詩の作者を表します -

    1. 詩人は詩人
    2. 印刷によって書かれた詩を表します - 含むあらゆる種類の印刷された出版物を表し詩人の詩。右バット詩人と詩オフ

    は明白です:

    • 詩人印刷モデルを扱うときにそれが私のために混乱となりhas_many
    • belongs_to詩人

    この場合、印刷は、ある意味では、詩人と詩の両方に属します。あなたは詩人has_many printingsや詩がhas_manyプリントが意味を成していると言うことができますが、逆ルートに行くのは難しいです...

    1詩人から5詩を印刷した雑誌や本はどうですか?または、詩の1つが10種類の雑誌に掲載されていますか?

    印刷自体が「多くの詩や詩に属する」ように見えます。私はこれが間違っていることを知っていますが、私はポイントを明確にしようとしています。

    答えられる質問は次のとおりです。 これらの関係をどのように設定しますか?具体的には、モデルとデータベースの表はどのようなものになりますか、それらを使用して関連データにアクセスする方法は?

    ありがとうございました!

  • 答えて

    2

    1つの詩人から5つの詩を印刷した雑誌や書籍はどうですか?

    詩人が多くの詩と多くの詩を持っている場合は、詩人を得ることができます。

    Poet.poems.first.printingsは最初の詩

    詩人のすべての印刷物を返すか、Printing.poems.first.poetあなたが印刷で最初の詩の詩人を得ることができる。この方法を行うことができます。

    これらの関係をどのように設定しますか?具体的には、モデルとデータベースの表はどのようなものになりますか、それらを使用して関連データにアクセスする方法は?

    私はあなたが参加するテーブルを必要とするhas_and_belogs_to_manyの関連付けを使用しているため、詩や印刷物

    のためにあなたは、この

    のように見えるの移行を持つことになり、この

    Poet :has_many poems 
    poem :belongs_to poet 
    poem :has_and_belongs_to_many printings 
    printing :has_many poems 
    

    ようにそれを設定します

    CreatePoemsPrintingJoinTable < ActiveRecord::Migration 
        def self.up 
        create_table :poems_printings, :id => false do |t| 
         t.integer :poem_id 
         t.integer :printing_id 
        end 
        end 
    
        def self.down 
        drop_table :poems_printings 
        end 
    end 
    

    他の表はかなり簡単です

    CreateTablePoems < ActiveRecord::Migration 
        def self.up 
        create_table :poems, do |t| 
        t.integer :poet_id 
        end 
        end 
    
        def self.down 
        drop_table :poems 
        end 
    end 
    
    CreateTablePoets < ActiveRecord::Migration 
        def self.up 
        create_table :poets do |t| 
        end 
        end 
    
        def self.down 
        drop_table :poems 
        end 
    end 
    
    CreateTablePrintings < ActiveRecord::Migration 
        def self.up 
        create_table :printings do |t| 
        end 
        end 
    
        def self.down 
        drop_table :printings 
        end 
    end 
    
    +0

    多くの印刷で詩が出現する可能性がある場合は厄介になりますが、ここに該当するかどうかは分かりません。 – house9

    +0

    詩が多くの印刷物を持つことができるようにそれを変更してください – austinbv

    +0

    これはまさにそのケースであり、皆さんが回答を投稿した通りにテキストを更新しました:X –

    関連する問題