我是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
第二种方法 -
多态协会
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
这种方法中的任何一种方法都足够好,还是更好的方法呢?