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的答案。