如何在没有主键的情况下创建模型
我想创建一个扩展ActiveRecord :: Base的模型'Relation',将其表名设置为'questions_tags',并且没有主键。我该怎么办?如何在没有主键的情况下创建模型
class Relation < ActiveRecord::Base
set_table_name 'questions_tags' # set table name, right?
# how to define 'no-pk'?
end
UPDATE
嗨,伙计们。我知道使用'create_table'可以解决这个问题,但这正是我想知道的:create_table(:id=>false)
背后的魔法是什么?如何在不使用create_table(:id=>false)
的情况下获得相同的效果?
创建迁移,看起来像这样:
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
感谢您的回答。请看我更新的问题 – Freewind 2010-06-21 12:25:08
如果您希望创建数据透视表,因为它看起来像表名,那么AR会在后台处理它。
但是,如果你正在寻找创造更多精密组件则表: 1)重命名表“关系基本”请 2)使用一个主键“ID”
有没有很好的理由不要在表格中使用主键,而且很可能以后您很可能会后悔自己。
谢谢。请看我更新的问题,我只想知道发生了什么。 – Freewind 2010-06-21 12:26:37
为什么你不想PK?
活动记录预计PK,我不明白它可以做什么伤害。
谢谢。因为它是一个连接表,我不希望它有一个PK – Freewind 2010-06-21 12:25:37
如果你正在创建遗留数据库映射,那很好,但在ActiveRecord模式/设计中的连接表有主键。这是一个可以让你的生活变得更轻松或者不断对抗的惯例。 – nessur 2012-04-18 19:05:26
有很多时候你不会想要一个主键。在基于非主键列进行大量插入和读取的报表上,您可能需要尽可能少的索引。有一个主键列,你不会使用除了慢插入。 – WattsInABox 2012-06-15 18:24:03
据我没有魔法。 'create_table'有一个额外的选项,不管是否必须创建'id'-列。就这样。当你要求“魔法”时:你的意思是代码,生成的sql语句,还是别的......? – nathanvda 2010-06-21 13:07:53
如果你想知道幕后发生了什么,我会建议在Rails API文档中挖掘depper: http://api.rubyonrails.org/classes/ActiveRecord/Base.html, http:// api .rubyonrails.org/classes/ActiveRecord/Migration.html, http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html – auralbee 2010-06-21 13:27:51
@ nathanvda,auralbee:谢谢你们俩。我刚接触rails,也许我需要阅读更多关于ActiveRecord的文章。 – Freewind 2010-06-22 03:18:47