首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails在带有额外字段的表上将Has_Many插入到Has_Many

Rails在带有额外字段的表上将Has_Many插入到Has_Many
EN

Stack Overflow用户
提问于 2018-09-04 08:03:56
回答 1查看 50关注 0票数 1

我们有一个简单的应用程序,我们创建了这些模型:

代码语言:javascript
复制
class Cliente < ApplicationRecord
    has_and_belongs_to_many :hardware
end

代码语言:javascript
复制
class Hardware < ApplicationRecord
    has_and_belongs_to_many :clientes
end

我们创建了一个名为"clientes_hardwares“的中间表,当我们为客户端分配硬件时,我们想要在表中设置另一个字段"vigencia",表:

在我们的控制器上我们设置:

代码语言:javascript
复制
def sethardware
    @cliente = Cliente.find(params[:cliente_id])
    @cliente.hardware << Hardware.find(params[:hardware_id])

    @cliente.hardware.build(:vigencia => "2018-01-01")
    if @cliente.save
        flash[:info] = 'Cliente creado correctamente'
        redirect_to action: 'show', id: params[:cliente_id]
    else
        flash[:alert] = 'Error al crear el usuario'
        redirect_to action: 'show', id: params[:cliente_id]
    end
end

不使用这一行:

代码语言:javascript
复制
@cliente.hardware.build(:vigencia => "2018-01-01")

它可以工作并设置client_id和hardware_id,我们如何设置名为"vigencia“的额外字段,因为如果我们调用like build和like param,则表明硬件没有该属性?

问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 08:34:50

如果需要向连接表(clientes_hardwares)添加属性,<<方法(不显式使用连接表)将不起作用,因为它不设置任何附加属性(请注意,附加属性不在客户端或硬件中,而是在连接表中)。您必须定义并改用联接模型:

代码语言:javascript
复制
class Cliente < ApplicationRecord
  has_many :clientes_hardwares
  has_many :hardwares through: :clientes_hardwares
end

class Hardware < ApplicationRecord
  has_many :clientes_hardwares
  has_many :clientes through: :clientes_hardwares
end

class ClientesHardware < ApplicationRecord
  belongs to :cliente
  belongs to :hardware
end

def sethardware
  @cliente = Cliente.find(params[:cliente_id])
  @hardware = Hardware.find(params[:hardware_id])

  @cliente.clientes_hardwares.build(
    :hardware => @hardware, 
    :vigencia => "2018-01-01"
  )
  if @cliente.save
    flash[:info] = 'Cliente creado correctamente'
    redirect_to action: 'show', id: params[:cliente_id]
  else
    flash[:alert] = 'Error al crear el usuario'
    redirect_to action: 'show', id: params[:cliente_id]
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52157260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档