Ruby on Rails генерирует поле модели: тип - каковы варианты для поля: тип?


308

Я пытаюсь создать новую модель и забыть синтаксис ссылки на идентификатор другой модели. Я бы сам посмотрел, но не нашел среди всех моих ссылок на документацию по Ruby on Rails, как найти точный источник.

$ rails g model Item name:string description:text(а здесь или reference:productили references:product). Но лучший вопрос заключается в том, где или как я могу легко найти такую ​​глупость в будущем?

Примечание: я усвоил трудный путь, что если я наберу один из этих вариантов неправильно и запущу миграцию, то Ruby on Rails полностью rake db:rollbackиспортит мою базу данных ... и бессильна против таких ошибок. Я уверен, что я просто чего-то не понимаю, но пока я не понимаю ... "подробная" информация, возвращаемая rails g modelмной, все еще оставляет меня в покое ...


А как насчет опций: uniq и: index? Как в "rails g body title модели: text tracking_id: integer: uniq". Я не мог найти документацию для них. Есть еще?
Кангур

11
rails generate model --help
Деннис

1
Использование контроля версий предоставит вам простой способ отката любых сгенерированных файлов. И если проблема в базе данных ... ну, вы всегда можете сделать db: schema: load
Гектор Ордоньес

1
ну, это было просмотрено более 140 тысяч раз, и 243 человека на сегодняшний день сочли это полезным, так что это не глупый вопрос, во что бы то ни стало :)
BKSpurgeon

Ответы:


475
:primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp,
:time, :date, :binary, :boolean, :references

Смотрите раздел определения таблиц .


13
хм ... нет упоминания :referenceили :referencesв вашем ответе или объяснения того, как передать его генераторам по предоставленной вами ссылке?!?
Meltemi

53
Это не отвечает на вопрос вообще.
MikeEL

1
Выбрал это как ответ, но знайте, что : ссылки также вариант.
Мелтеми

14
Есть ли документация, которая на самом деле определяет эти типы столбцов? Например, чем stringотличается от text?
Грант Бирчмайер

3
@Kangur uniqи indexсуффиксы (и все типы) документируются при использовании rails generate model. Запустите, rails g modelчтобы увидеть документацию по использованию.
Деннис

188

Чтобы создать модель, которая ссылается на другую, используйте генератор моделей Ruby on Rails:

$ rails g model wheel car:references

Это производит app / models / wheel.rb :

class Wheel < ActiveRecord::Base
  belongs_to :car
end

И добавляет следующую миграцию:

class CreateWheels < ActiveRecord::Migration
  def self.up
    create_table :wheels do |t|
      t.references :car

      t.timestamps
    end
  end

  def self.down
    drop_table :wheels
  end
end

Когда вы запустите миграцию, в вашем db / schema.rb появится следующее :

$ rake db:migrate

create_table "wheels", :force => true do |t|
  t.integer  "car_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

Что касается документации, отправной точкой для генераторов rails является Ruby on Rails: руководство по командной строке Rails, которое указывает на документацию API для получения дополнительной информации о доступных типах полей.


4
немного устарели с комментарием, но это ответ на этот вопрос. +1
omninonsense

7

$ rails g model Item name:string description:text product:references

Я тоже нашел гиды трудно использовать. Легко понять, но трудно найти то, что я ищу.

Кроме того, у меня есть временные проекты, на которых я запускаю rails generateкоманды. Затем, когда я заставил их работать, я запустил их на своем реальном проекте.

Ссылка на приведенный выше код: http://guides.rubyonrails.org/getting_started.html#associating-models


3

Помните, что при написании этой команды не используйте заглавные буквы. Например:

Пиши:

rails g model product title:string description:text image_url:string price:decimal

Не пиши:

rails g Model product title:string description:text image_url:string price:decimal

По крайней мере, это была проблема для меня.


Подождите?!? Какой? Я постоянно пишу названия своих моделей! Какие "проблемы" вы видите?
Мелтеми

2
Я говорю не о названии вашей модели, а о названии «Модель». Я попытался создать такую ​​модель: rails g Название продукта модели: строка и получил: Не удалось найти модель генератора. поэтому я попробовал это так: rails g название модели продукта: строка, и это сработало
Виктор Аугусто,

1
Ах. Не сталкивался с этим b4. Хороший совет!
Мелтеми,

2
(Проблема не в названии модели, а в слове, modelотносящемся к генератору. rails g model Product …Хорошо.)
Ашера,


0

В ROR очень просто создать модель, которая ссылается на другую.

рельсы г модель Название товара: описание строки: текстовое изделие: ссылки

Этот код добавит столбец product_id в таблицу Item.


0

Существует множество типов данных, которые вы можете указать при создании модели, например:

:primary_key, :string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean, :references

синтаксис:

field_type:data_type

0

У меня была та же проблема, но мой код был немного другим.

def new
 @project = Project.new
end

И моя форма выглядела так:

<%= form_for @project do |f| %>
     and so on....
<% end %>

Это было совершенно правильно, поэтому я не знал, как это понять.

Наконец, просто добавив

url: { projects: :create }

после

<%= form-for @project ...%>

работал на меня.


Это может быть хорошим ответ , но я не знаю , как это относится к ФПУ , который о типах полей ( :integer, :stringи т.д ...).
Meltemi
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.