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

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

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

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

Ответ 1

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

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

Ответ 2

Чтобы создать модель, которая ссылается на другую, используйте генератор моделей 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 для получения дополнительной информации о доступных типах полей.

Ответ 3

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

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

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

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

Ответ 5

Помните, что не пишите эту команду при написании этой команды. Например:

Пишите:

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

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

Ответ 6

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

def new @project = Project.new end

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

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

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

Наконец, просто добавив url: { projects: :create } после того, как <%= form-for @project сработал для меня.

Ответ 7

$ rails g model Название элемента: описание строки: текст

Вы забыли добавить ссылки на товары для товара.

Чтобы добавить ссылку на товар в модель изделия, выполните следующие действия.

$ rails g миграция Продукт AddProductToItems: ссылки $ rails db: migrate

Тогда он будет генерировать так

class AddProductToItems < ActiveRecord::Migration[5.2]
  def change
    add_reference :items, :product, foreign_key: true
  end
end

Наконец добавлены ссылки на товары для модели товара

Ответ 8

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

рельсы g модель Имя элемента: описание строки: текстовое изделие: ссылки

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