使用ajax的方式来开发用户地址,eggman中采用render json的方式暂时理解不了,自己采用js的方式来进行实现

model设计

针对user这个关联model

#用户,用户有很多地址,该地址中需有一个为默认地址,user这个model的设置
has_many :addresses, -> { where(address_type: Address::AddressType::User).order("id desc") }
belongs_to :default_address, class_name: :Address, optional: true

#注意的问题,在rails5.1之后,belongs_to所在的model,必须添加外键,如果不想添加外键,可以指定可选
belongs_to :default_address, class_name: :Address, optional: true

针对address这个model

#在address进行删除和生成的时候,因为user必须指定一个默认的地址,所以在删除和生成之前,都要进行如下的操作
class Address < ApplicationRecord
  after_save :set_as_default_address
  before_destroy :remove_self_as_default_address

  #两种地址,一种用户地址,一种订单地址
  module AddressType
    User = 'user'
    Order = 'order'
  end

  private
    def set_as_default_address
      if self.set_as_default.to_i == 1
        self.user.default_address = self
        self.user.save!
      else
        remove_self_as_default_address
      end
    end

    def remove_self_as_default_address
      if self.user.default_address == self
        self.user.default_address = nil
        self.user.save!
      end
    end
end

results matching ""

    No results matching ""