我有一排桌子和两个columns-Rails的ActiveRecord - 有没有一种方式来执行没有ID的表上的操作?
int 'version', datetime 'updated'
有一个Rails ActiveRecord的方式来获得和这些列中设定的数据? 没有id列。
我正在使用此表来跟踪其他表的查询版本。在对另一个表的每个查询之后,版本列将增加,并且更新列将使用当前日期时间进行设置。
我有一排桌子和两个columns-Rails的ActiveRecord - 有没有一种方式来执行没有ID的表上的操作?
int 'version', datetime 'updated'
有一个Rails ActiveRecord的方式来获得和这些列中设定的数据? 没有id列。
我正在使用此表来跟踪其他表的查询版本。在对另一个表的每个查询之后,版本列将增加,并且更新列将使用当前日期时间进行设置。
没有阻止你使用它的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)
希望可以帮到
当没有id
列存在时,Rails唯一能够使用的是has_and_belongs_to_many
连接表。
否则,您必须下降到纯SQL,喜欢的东西:
SomeModel.connection.execute "select * from mytable"
或者,如果version
旨在成为主键,用约翰的回答。
在您的模型类中,使用self.primary_key = "primary_key_column"
指定要用作主键列的列。我想你的情况可以使用版本列。
我的目的是让这个表的工作方式类似于Rails跟踪'schema_info'表的迁移版本。 – daustin777 2009-05-05 15:58:11
我已经在这个主题上贴出一个博客:http://ho.race.hk/blog/?p=208 – ohho 2010-03-17 03:17:59