ruby 使用belongs_to和has_many进行保存时出现Rails模型错误未知属性

kqqjbcuj  于 2022-12-18  发布在  Ruby
关注(0)|答案(1)|浏览(113)

我不理解Rails模型在使用复数或非复数建立关系时是如何工作的。
示例:
我们有一个叫“客户”的模型。

class Cliente < ApplicationRecord
    has_many :sucursales
end

MySQL上的表为:

我们有一个叫做“Sucursale”的模型:

class Sucursale < ApplicationRecord
    belongs_to :cliente
end

该表为:

在表sucursale上,已经有了通过迁移“t.belongs_to:clientes,index:”创建的“clientes_id”。没错。
在我们简单的crud,我们想创建一个新的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.

我们错过了什么吗?

rryofs0p

rryofs0p1#

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

相关问题