Как я могу создать поле, используя идентификатор из той же строки в ActiveRecord Ruby - PullRequest
0 голосов
/ 31 марта 2012

----- ОБНОВЛЕНИЕ -----

Ну, похоже, проблема была в last.id.Когда база данных создана, работает нормально, но когда не выходит из строя.Теперь вопрос другой: как я могу создать поле, используя идентификатор из той же строки?

-------- ORIGINAL ------

I'mЯ работаю с активной записью в чистом рубине (без Rails), и я буквально схожу с ума от этого.Это мой код

class Enviroment < ActiveRecord::Base
    #self.table_name = 'enviroments'
    self.connection.create_table(:enviroments, :force=>true) do |t|
        t.column :name, :string, :default=>'env-'+ (last.id-1).to_s
        t.column :ssh, :string, :default=>nil
    end
end

и здесь ошибка:

ActiveRecord::StatementInvalid: Could not find table 'enviroments'
from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.3/lib/active_record/connection_adapters/sqlite_adapter.rb:465:in `table_structure'

, если я использую self.table_name = 'enviroments' все еще не работает.Я обновил драгоценные камни и ни один.Я новичок с ruby ​​и базами данных, но я не могу понять эту проблему, я думаю, этот код работал в прошлом: S

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Наконец, это было мое решение:

class Enviroment < ActiveRecord::Base
after_create :create_default

private
def create_default
    if name == nil
        s = 'env-' + self.id.to_s
        self.name = s
        self.save
    end
end

end

class CreateSchema < ActiveRecord::Migration
create_table(:enviroments, :force=>true) do |t|
    t.column :name, :string, :default=>nil
    t.column :ssh, :string, :default=>nil
end
0 голосов
/ 31 марта 2012

Ваш код для создания таблицы (кстати, очень странно иметь такой в ​​модели) вызывает last.id, и, конечно, для вызова last таблица уже должна существовать.

Поскольку вы передаете :force => true create_table, вы фактически уничтожите таблицу, если она уже существует.

Вероятно, вы могли бы заставить свой код работать, если бы вы спрятали значение last.id в локальной переменной перед вызовом create_table, но я не понимаю, почему вы создаете такие таблицы.

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