Как использовать выражение SQL по умолчанию с ActiveRecord? - PullRequest
4 голосов
/ 21 сентября 2011

Я пытаюсь использовать значения по умолчанию для модели в рельсах.Лучший документированный способ сделать это, который я видел, это использовать параметр: default в миграции.Тем не менее, похоже, что это работает только для значений.Я пытаюсь установить выражение по умолчанию, в частности currval('customers_id_seq'::regclass).Я могу добавить выражение по умолчанию вручную, но не могу понять, как указать rails использовать значение по умолчанию.Как я могу использовать это значение по умолчанию при создании объектов модели?

EDIT Вот более конкретный пример:

class CreateTestmodels < ActiveRecord::Migration
  def up
    create_table :testmodels do |t|
      t.integer :idxfield, :null=>false
      t.string :datafield
      t.timestamps

    end
    execute("ALTER TABLE testmodels ALTER COLUMN idxfield SET DEFAULT currval('testmodels_id_seq'::regclass)")
  end

  def down
    drop_table :testmodels
  end
end

С помощью этой миграции я могу запустить insert into testmodels (datafield) VALUES ('sometestdata');, который добавит в таблицу строку, в которой idxfield по умолчанию будет id.

Однако, если я запускаю Testmodel.create(:datafield=>"testdata") из консоли rails, он заменяет ноль на idxfield и выдает исключение.

1 Ответ

0 голосов
/ 21 сентября 2011

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

Если вам нужно добавить его в столбец без первичного ключа, вам нужно будет запустить ALTER TABLE за пределами create_table и добавить его самостоятельно, например

  execute("ALTER TABLE users ADD COLUMN foo INTEGER default nextval('users_id_seq'::regclass)")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...