Передача дополнительных параметров в 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