Неизвестный атрибут ошибки модели Rails при сохранении с принадлежащим - PullRequest
0 голосов
/ 04 сентября 2018

Я не хочу понимать, как работает модель на рельсах, когда вы устанавливаете отношения с множественным или не множественным числом.

Пример:

У нас есть эта модель под названием "Клиент".

class Cliente < ApplicationRecord
    has_many :sucursales
end

Таблица на MySQL:

enter image description here

И у нас есть модель под названием «Sucursale»:

class Sucursale < ApplicationRecord
    belongs_to :cliente
end

Таблица:

enter image description here

В таблице sucursale уже есть "clientes_id", который был создан с помощью миграции "t.belongs_to: clientes, index: true.

На нашем простом примере мы хотим создать новую Sucursale с клиентскими отношениями с:

def create
        @sucursalcliente = Cliente.find(params[:clientes_id])
        @sucursalcliente.sucursales.build(
            :nombre => params[:nombre], 
            :calle => params[:calle],
            :numero_interior => params[:numero_interior],
            :numero_exterior => params[:numero_exterior],
            :colonia => params[:colonia],
            :municipio => params[:municipio],
            :estado => params[:estado],
            :pais => params[:pais],
            :codigo_postal => params[:codigo_postal],
            :email => params[:email],
            :telefono => params[:telefono]
        )])
        if @sucursalcliente.save
            flash[:info] = 'Sucursal creado correctamente'
            redirect_to action: 'index'
        else
            flash[:alert] = 'Error al crear la sucursal'
            redirect_to action: 'index'
        end
    end

Но когда мы запускаем этот скрипт, мы получаем.

unknown attribute 'cliente_id' for Sucursale.

Мы что-то упустили?

С уважением.

1 Ответ

0 голосов
/ 04 сентября 2018

неизвестный атрибут 'cliente_id' для Sucursale.

Проблема в том, что t.belongs_to :clientes, index: true генерирует имя столбца как clientes_id , а не cliente_id

Решение:

Вы можете выбрать откат миграции , отредактировать код в файле миграции как

t.belongs_to :cliente, index: true

и перенести его снова.

OR

Если вы решите не откатывать миграцию, укажите пользовательский foreign_key в ассоциации, чтобы переопределить поведение Rails по умолчанию.

class Cliente < ApplicationRecord
  has_many :sucursales, foreign_key: :clientes_id
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...