2009-05-05 18 views
3

我有一排桌子和两个columns-Rails的ActiveRecord - 有没有一种方式来执行没有ID的表上的操作?

int 'version', datetime 'updated' 

有一个Rails ActiveRecord的方式来获得和这些列中设定的数据? 没有id列。

我正在使用此表来跟踪其他表的查询版本。在对另一个表的每个查询之后,版本列将增加,并且更新列将使用当前日期时间进行设置。

+0

我的目的是让这个表的工作方式类似于Rails跟踪'schema_info'表的迁移版本。 – daustin777 2009-05-05 15:58:11

+0

我已经在这个主题上贴出一个博客:http://ho.race.hk/blog/?p=208 – ohho 2010-03-17 03:17:59

回答

4

没有阻止你使用它的ActiveRecord无ID:

迁移包含:

create_table :posts, :id => false do |t| 
    t.integer :version 
    t.datetime :updated 
end 

查询:

>> Post.create(:version => 1, :updated => Time.now) 
=> #<Post version: 1, updated: "2009-05-05 19:24:31"> 
>> Post.all 
=> [#<Post version: 1, updated: "2009-05-05 19:24:31">] 
>> Post.all(:conditions => { :version => 1 }) 
=> [#<Post version: 1, updated: "2009-05-05 19:24:31">] 

日志报告这些SQL请求:

CREATE TABLE "posts" ("version" integer, "updated" datetime) ; 
INSERT INTO "posts" ("version", "updated") VALUES(1, '2009-05-05 19:24:31'); 
SELECT * FROM "posts" 
SELECT * FROM "posts" WHERE ("posts"."version" = 1) 

希望可以帮到

1

当没有id列存在时,Rails唯一能够使用的是has_and_belongs_to_many连接表。

否则,您必须下降到纯SQL,喜欢的东西:

SomeModel.connection.execute "select * from mytable" 

或者,如果version旨在成为主键,用约翰的回答。

6

在您的模型类中,使用self.primary_key = "primary_key_column"指定要用作主键列的列。我想你的情况可以使用版本列。

相关问题