Передача дополнительных параметров в Rails Generate Model?

Я новичок в Ruby и Rails, и я запускаю Rails 3 на Ruby 1.9.2.

Я хочу создать модель, поэтому я посмотрел документацию , чтобы получить определение таблицы, которое я хочу, но мне интересно, как я передам это для создания рельсов модель?

В основном я хочу это:

title :string, :null => false
details :text, :limit => 30000, :null => false

Но я могу указать только имя столбца и тип, а не: null или: limit.

Я пробовал rails model generate Article (title:string, :null => false) (details:text, :limit=>30000, :null => false), но это просто говорит мне, что (это неожиданный токен.

Если я просто сгенерирую модель с заголовком: строковые данные: текст, то файл article.rb пуст, по-видимому, потому, что он все равно читает из БД.

Поскольку все в Rails должно быть a) простым и b) магии, мне интересно, я просто что-то пропустил и должен передать что-то вроде хэша для генерации модели? Или мне действительно нужно вручную отредактировать файл миграции .rb?

Ответ 1

Да, вам нужно вручную отредактировать файл миграции для этого. Генератор просто предлагает отправную точку, он не делает все.

Выполнение этого в файле миграции очень просто.

create_table :articles do |t|
  t.string :title, :null => false
  t.text   :details, :limit => 3000, :null => false
end

Ответ 2

Как оказалось, предел может (теперь) указываться в командной строке:

rails generate model user pseudo:string{30}

Источник: doc из проекта Rails GitHub

Однако установка по умолчанию все еще требует редактирования вручную.

Дополнительные параметры миграции см. в официальном руководстве по миграции Rails.

Ответ 3

Попробуйте несколько трюков: belongs_to и index

rails g model User username:string:index group:belongs_to

Это создаст:

class User < ActiveRecord::Base
  belongs_to :group
  attr_accessible :username
end

Ответ 4

Вы можете передать "null".to_sym => false в своей рельсе, создающей модель.
Например:

rails g model client 'ClientName, "null".to_sym => false:string{100}'

Это превратит символ "null" в символ, позволяя ему работать правильно при запуске db:migrate