Rails ActiveRecord - есть ли способ выполнять операции над таблицами без идентификатора? - PullRequest
3 голосов
/ 05 мая 2009

У меня есть таблица с одной строкой и двумя столбцами-

int 'version', datetime 'updated'

Существует ли в Rails ActiveRecord способ получения и установки данных в этих столбцах? Столбец идентификатора отсутствует.

Я использую эту таблицу для отслеживания версий запросов других таблиц. После каждого запроса другой таблицы столбец версии увеличивается, а для обновленного столбца устанавливается текущая дата / время.

Ответы [ 3 ]

6 голосов
/ 05 мая 2009

В классе вашей модели используйте self.primary_key = "primary_key_column", чтобы указать столбец, который будет использоваться в качестве столбца первичного ключа. Я полагаю, что в вашем случае вы могли бы использовать колонку версий.

4 голосов
/ 05 мая 2009

Ничто не мешает использовать его в 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) 

Надеюсь, это поможет

1 голос
/ 05 мая 2009

Единственное, с чем Rails работает, когда отсутствует столбец id, это таблица соединения has_and_belongs_to_many.

В противном случае вы должны перейти на чистый SQL, например:

SomeModel.connection.execute "select * from mytable"

Или, если version предназначен для первичного ключа, используйте ответ Джона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...