#ruby-on-rails #postgresql
#ruby-on-rails #postgresql
Вопрос:
Где и как я должен определить inet
? Это допустимый тип данных PostgreSQL.
http://www.postgresql.org/docs/8.4/static/datatype-net-types.html
rake db:migrate
== CreateSysHosts: migrating =================================================
-- create_table(:sys_hosts)
rake aborted!
An error has occurred, this and all later migrations canceled:
undefined method `inet' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:0x00000005e3e068>/opt/csdashboard/db/migrate/20140628123004_create_sys_hosts.rb:4:in `block in change'
Файл миграции:
class CreateSysHosts < ActiveRecord::Migration
def change
create_table :sys_hosts do |t|
t.inet :address
t.string :name
t.string :os_name
t.string :os_flavor
t.int :user_id
t.string :info
t.string :comments
t.timestamps
end
end
end
Комментарии:
1. Можете ли вы опубликовать файл миграции?
2. обновлен вопрос с файлом миграции.
Ответ №1:
Используйте postgre_ext gem, который поддерживает расширенные типы данных Postgres, такие как inet.
Пример postgre_ext: добавление типов данных Postgres в Rails.
postgres_ext добавляет миграцию и поддержку schema.rb для следующего типа PostgresSQL:
- INET
- CIDR
- MACADDR
- UUID
- Массивы
Комментарии:
1. Для этого потребуется обновление с 3.2.14 до 4.x, верно?
2. Я думаю, да. Или попробуйте более старую версию — rubygems.org/gems/postgres_ext/versions/1.0.0
3. Теперь я получаю неопределенный
int' for #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::TableDefinition:0x00000004c47698>/opt/csdashboard/db/migrate/20140628123004_create_sys_hosts.rb:9:in
блок метода в изменении ‘4. однако это должен быть отдельный вопрос