使用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