【问题标题】:How to create a model without primary key in rails?如何在rails中创建没有主键的模型?
【发布时间】:2021-01-05 01:25:08
【问题描述】:

我想创建一个扩展 ActiveRecord::Base 的模型“Relation”,将其表名设置为“questions_tags”,并且没有主键。我该怎么办?

class Relation < ActiveRecord::Base
  set_table_name 'questions_tags' # set table name, right?

  # how to define 'no-pk'?
  
end

更新


我知道使用 'create_table' 可以解决这个问题,但这正是我想知道的:create_table(:id=&gt;false) 背后的魔力是什么?不使用create_table(:id=&gt;false)怎么能达到同样的效果?

【问题讨论】:

标签: ruby-on-rails activerecord


【解决方案1】:

创建如下所示的迁移:

class CreateQuestionsTags < ActiveRecord::Migration

  def self.up
   create_table :questions_tags, {:id => false, :force => true} do |t|
     ...
     t.timestamps
   end
  end

  def self.down
   drop_table :questions_tags
  end

end

【讨论】:

    【解决方案2】:

    如果您要创建一个数据透视表,就像从表名中看到的那样,那么 AR 将在后台处理它。

    但是,如果您要创建一个包含更多字段的表,那么: 1)请将您的表格重命名为“realtions” 2)使用主键“id”

    没有充分的理由不在表中使用主键,而且您很可能以后会后悔。

    【讨论】:

      【解决方案3】:

      你为什么不想PK?

      Active Record 需要 PK,但我看不出它会造成什么伤害。

      【讨论】:

      • 如果您正在创建遗留数据库映射,那很好,但 ActiveRecord 模式/设计中的连接表具有主键。这是一个惯例,你可以遵循它来让你的生活更轻松,也可以不断地与之抗争。
      • 很多时候你不想要主键。在基于非主键列进行大量插入和读取的报告表中,您可能需要尽可能少的索引。拥有一个您不会使用的主键列只会降低插入速度。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      相关资源
      最近更新 更多