Rails ActiveRecord – 有没有一种方法可以在没有id的表上执行操作?

我有一个一排两列的桌子 –

int 'version', datetime 'updated' 

是否有Rails ActiveRecord方法来获取和设置这些列中的数据? 没有id列。

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

没有ID阻止您在ActiveRecord中使用它:

迁移包含:

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

查询:

 >> Post.create(:version => 1, :updated => Time.now) => # >> Post.all => [#] >> Post.all(:conditions => { :version => 1 }) => [#] 

日志报告这些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) 

希望有所帮助

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

当没有id列时,Rails唯一可以使用的是has_and_belongs_to_many连接表。

否则你必须下载到纯SQL,例如:

 SomeModel.connection.execute "select * from mytable" 

或者如果version是主键,请使用John的答案。