Ruby on rails 关于铁路适当联系的问题

Ruby on rails 关于铁路适当联系的问题,ruby-on-rails,activerecord,associations,has-many,has-many-through,Ruby On Rails,Activerecord,Associations,Has Many,Has Many Through,以这种情况为例 您有3种型号: 诗人-代表一首诗的作者 诗-代表诗人所写的诗 印刷-表示包含诗人诗歌的任何类型的印刷出版物 一开始,诗人和诗歌就很明显: 诗人有许多诗 诗属于诗人 在处理打印模型时,我会感到困惑 在这种情况下,印刷品在某种意义上属于诗人和诗歌。你可以说一个诗人有很多印刷品,或者一首诗有很多印刷品,这是有道理的,但是走相反的路线是很棘手的 如果某个杂志或书籍印刷了一位诗人的5首诗,情况会怎样?或者,其中一首诗发表在10种不同的杂志上 似乎印刷品本身“属于许多”诗歌或诗人。我知道

以这种情况为例

您有3种型号:

  • 诗人-代表一首诗的作者
  • 诗-代表诗人所写的诗
  • 印刷-表示包含诗人诗歌的任何类型的印刷出版物
  • 一开始,诗人和诗歌就很明显:

    • 诗人有许多诗
    • 属于诗人
    在处理打印模型时,我会感到困惑

    在这种情况下,印刷品在某种意义上属于诗人和诗歌。你可以说一个诗人有很多印刷品,或者一首诗有很多印刷品,这是有道理的,但是走相反的路线是很棘手的

    如果某个杂志或书籍印刷了一位诗人的5首诗,情况会怎样?或者,其中一首诗发表在10种不同的杂志上

    似乎印刷品本身“属于许多”诗歌或诗人。我知道这是错误的,但我只是想阐明这一点

    因此,需要回答的问题是: 你将如何建立这些关系?具体来说,模型和数据库表是什么样子的,您将如何使用它们访问相关数据

    谢谢大家!

    如果某个杂志或书籍印刷了一位诗人的5首诗,情况会怎样

    请记住,如果你有一位诗人有很多诗,而印刷品也有很多诗,那么你总能找到这位诗人

    Poeter.poets.first.printings将返回诗人第一首诗的所有印刷品

    或者你可以做印刷。诗。第一。诗人这样你可以得到印刷中第一首诗的诗人

    你将如何建立这些关系?具体来说,模型和数据库表是什么样子的,您将如何使用它们访问相关数据

    我会这样设置它

    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
    
    因为您使用的是has_和belogs_to_多个关联,所以您需要一个连接表,用于诗歌和打印

    您将有这样的迁移

    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
    
    CreatePoemsPrintingJoinTablefalse do | t|
    t、 整数:poem\u id
    t、 整数:打印\u id
    结束
    结束
    def自动关闭
    下拉表格:诗歌打印
    结束
    结束
    
    其他的桌子很简单

    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
    
    CreateTablePoems
    如果一首诗可以出现在许多印刷品中,这会变得更加棘手,不确定这里是否是这样?事实就是如此,我刚刚更新了文本,正如你们发布的答案:习近平会建议一首诗
    有很多印刷品,我同意,我总是忘记habtm,我更新了我的答案,以反映您是否愿意为您的解决方案添加DB表的外观?我想这很简单,但我只是想确定一下。