首页 > 解决方案 > Rails 模型错误未知属性在保存时使用 belongs_to 和 has_many

问题描述

当您设置复数或非复数关系时,我不了解模型在轨道上的工作原理。

例子:

我们有这个模型叫做“Cliente”。

class Cliente < ApplicationRecord
    has_many :sucursales
end

MySQL上的表是:

在此处输入图像描述

我们有一个名为“Sucursale”的模型:

class Sucursale < ApplicationRecord
    belongs_to :cliente
end

表格是:

在此处输入图像描述

在表 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.

我们错过了什么吗?

提前问候。

标签: ruby-on-railsrubyactiverecord

解决方案


Sucursale 的未知属性“cliente_id”。

问题是t.belongs_to :clientes, index: true生成的列名clientes_id 不是 cliente_id

解决方案:

您可以选择回滚迁移,将迁移文件中的代码编辑为

t.belongs_to :cliente, index: true

并再次迁移它。

或者

如果您选择不回滚迁移,则foreign_key在关联上指定自定义以覆盖 Rails 的默认行为。

class Cliente < ApplicationRecord
  has_many :sucursales, foreign_key: :clientes_id
end

推荐阅读