Rails 3, генерируем миграцию с внешним ключом - PullRequest
4 голосов
/ 11 августа 2011

Как я могу сделать или сгенерировать миграцию с внешним ключом?У меня есть таблица municipios, и я хочу связать ее с таблицей ciudades, таблица будет иметь следующие поля: nombre_id (имя идентификатора), nombre (имя), departamento (отдел)Как запустить скрипт скаффолда для генерации миграции внешнего ключа?

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

Если вы хотите создать файл миграции, введите команду

rails generate migration NAME [field:type field:type] [options]

или ярлык

rails g migration NAME [field:type field:type] [options]

Ноесли вы хотите создать каркас из модели, ссылающейся на другую модель.Может быть, вы могли бы сделать это следующим образом

создать модель ciudades с помощью скаффолда

rails g scaffold ciudades nombre_id:integer nombre:integer departamento:string

создать модель municipios, которая ссылается на ciudades

rails g scaffold municipios ciudades:references

, это создаст атрибут ciudades_id в муниципалитетахТаблица.Миграция должна выглядеть следующим образом.

class CreateMunicipios < ActiveRecord::Migration
  def self.up
    create_table :municipios do |t|
      t.references :ciudades

      t.timestamps
    end
  end

  def self.down
    drop_table :municipios
  end
end

также в модели municipios это создаст отношение belongs_to.

, но это не обновляет модель cuidades.Вы должны указать отношение.

Также имейте в виду, что рельсы автоматически создают поле идентификатора на модели.это соглашение.если вы имеете в виду, что nombre_id является первичным ключом, вы должны указать его самостоятельно.

Надеюсь, что эта помощь

0 голосов
/ 11 августа 2011

Эшафот не создаст для вас отношения. Это создаст представления, контроллеры и другие, но остальные (отношения) должны быть закодированы вручную.

Итак, вы строите леса "municipios", но если вы хотите, чтобы у municipio было много сьюдад, вам нужно сделать это самостоятельно. Например:

Когда эшафот дает вам:

<% form_for([@municipio]) do |f| %>

Вам необходимо изменить его на:

<% form_for([@municipio, @ciudad]) do |f| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...