5

我实际上需要高级 Ruby/Rails 开发人员的一些建议,了解保存has_and_belongs_to_many关联的常见和正确方法是什么?

这就是我所做的,但对我来说感觉真的很脏,我真的不喜欢在我的应用程序中看到该代码:)

模型/公司.rb

class Company < ActiveRecord::Base
  has_and_belongs_to_many :type_taxes

  ## Add Type taxes association
  def insert_types_taxes( types_taxes )
    self.type_taxes.clear
    self.type_taxes << types_taxes
  end
end

模型/taxe.rb

class Taxes < ActiveRecord::Base
  has_and_belongs_to_many :societes
end

控制器/societes_controller

class SocietesController < ApplicationController
  # I use basically the same code for the update method
  def create
    params[:societe][:type_taxes_ids] ||= []
    @societe = Societe.new( societe_params )
    @societe.user_id = current_user.id
    if @societe.save
      add_types_taxes_to_societe
      redirect_to societes_path
    else
      load_resources
      render :new
    end
  end

  private
    def add_types_taxes_to_societe
      types_taxes = TypeTaxe.find params[:societe][:type_taxe_ids]
      @societe.insert_types_taxes types_taxes
    end
end

当这项工作正常时,我真的觉得很脏。它也没有告诉我关联创建是否成功创建。

非常欢迎任何建议来提高我的技能和我的代码:)

谢谢

4

1 回答 1

10

当您使用 = 直接重新分配 HABTM 关联时,它将删除您分配给它的内容中不存在的连接记录。也就是说:

types_taxes = TypeTaxe.find params[:societe][:type_taxe_ids]
@societe.types_taxes = types_taxes

本质上与您所拥有的相同。它只会根据需要删除和添加记录,因此如果存在重叠,重叠的记录将保持分配状态。

于 2013-09-19T23:51:23.867 回答