我有一个有一行两列的表 -
int 'version', datetime 'updated'
是否有Rails ActiveRecord方法来获取和设置这些列中的数据? 没有id列。
我正在使用此表来跟踪其他表的查询版本。在另一个表的每次查询之后,版本列递增,并且使用当前日期时间设置更新的列。
答案 0 :(得分:6)
在模型类中,使用self.primary_key = "primary_key_column"
指定要用作主键列的列。我猜你可以使用版本栏。
答案 1 :(得分:4)
没有ID阻止您在ActiveRecord中使用它:
迁移包含:
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)
希望有所帮助
答案 2 :(得分:1)
当没有id
列时,Rails唯一可以使用的是has_and_belongs_to_many
连接表。
否则你必须下载到纯SQL,例如:
SomeModel.connection.execute "select * from mytable"
或者如果version
打算成为主键,请使用John的答案。