首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于Rails中适当关联的问题

关于Rails中适当关联的问题
EN

Stack Overflow用户
提问于 2011-08-07 01:06:59
回答 1查看 99关注 0票数 1

以这种情况为例。

你有三种型号:

  1. Poet --代表一首诗的作者
  2. 诗--代表诗人
  3. 印刷的一首诗--代表一种包含诗人诗歌的印刷出版物。

诗人和诗歌是显而易见的:

  • 诗人has_many诗歌
  • belongs_to诗人

在处理印刷模式时,我会感到困惑。

在这种情况下,印刷,在某种意义上,属于诗人和诗歌。你可以说诗人has_many印刷或诗has_many印刷这是合理的,但走相反的路线是棘手的.

一本杂志或一本书刊登了一位诗人的五首诗,情况如何?或者,其中一首诗发表在10种不同的杂志上?

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

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-07 01:18:40

,一本杂志或一本书印刷了一位诗人的5首诗,情况如何?

记住,如果你有一个诗人有很多诗,印刷有很多诗,你可以永远得到诗人。

Poet.poems.first.printings会归还诗人第一首诗的所有印刷作品

或者你可以这样做Printing.poems.first.poet,你可以得到第一首诗的诗人在印刷。

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

我会这样安排的

代码语言:javascript
运行
复制
Poet :has_many poems
poem :belongs_to poet
poem :has_and_belongs_to_many printings
printing :has_many poems

因为您使用的是has_and_belogs_to_many关联,所以您需要一个连接表,用于诗歌和打印。

你会有这样的迁移

代码语言:javascript
运行
复制
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

其他的桌子都很简单

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6970047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档