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

时间:2009-05-05 15:40:16

标签: mysql ruby-on-rails ruby activerecord

我有一个有一行两列的表 -

int 'version', datetime 'updated'

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

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

3 个答案:

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