共享地址到两个实体 - 多态关联或两个地址表?

时间:2016-09-10 22:31:52

标签: mysql ruby-on-rails database polymorphic-associations model-associations

我是Ruby on Rails的新手,我不确定应用程序建模的最佳方法是什么。

我的应用有一个用户模型和一个餐厅模型。他们俩只有一个地址。

餐厅餐桌

create_table "restaurants", force: :cascade do |t|
 t.string   "name"
 t.text     "description"
 t.string   "email"
 t.string   "phone"
 t.integer  "category_id"
 t.datetime "created_at",     null: false
 t.datetime "updated_at",     null: false
end

用户表

create_table "users", force: :cascade do |t|
 t.string   "first_name"
 t.string   "surname"
 t.string   "email"
 t.datetime "created_at",     null: false
 t.datetime "updated_at",     null: false
end

餐馆地址必须比用户地址(纬度和长度)多两列

第一种方法 - 创建两个表,一个到餐厅地址,另一个到用户地址。

用户地址表

create_table "user_addresses", force: :cascade do |t|
 t.string   "street"
 t.string   "city"
 t.string   "zip_code"
 t.integer  "user_id"
 t.datetime "created_at",  null: false
 t.datetime "updated_at",  null: false
 t.index ["user_id"], name: "index_addresses_on_user_id"
end

餐厅地址表

create_table "restaurant_addresses", force: :cascade do |t|
 t.string   "street"
 t.string   "city"
 t.string   "zip_code"
 t.decimal  "longitude"
 t.decimal  "latitude"
 t.integer  "restaurant_id"
 t.datetime "created_at",  null: false
 t.datetime "updated_at",  null: false
 t.index ["restaurant_id"], name: "index_addresses_on_restaurant_id"
end

第二种方法 -

  1. 为用户模型和餐厅模型创建多态关联。
  2. 使用坐标创建一个单独的表格(仅与餐厅模型相关联)。
  3. 多态协会

    class User
     has_one :address, as: :addressable
    end
    
    class Restaurant
     has_one :address, as: :addressable
     has_one:coordinate
    end
    
    class Address
     belongs_to :addressable, polymorphic: true
    end
    

    这种方法中的任何一种方法都足够好,还是更好的方法呢?

0 个答案:

没有答案