我正在使用postgis处理空间数据。
我有一个通用的poi表,其数据为名称,地址,经度和纬度
我也在使用friendly_id gem
我想拥有Poi的住宿,餐饮和城市。
One Poi有一个住宿或一个餐饮或一个城市
我有很多适用于Poi的功能。
我想通过poi获得各种数据。
我认为我必须构建一个具有has_one多态关联的系统......但我不知道,有什么更好的方法。
我想做什么?
通过friendly_id调用具有不同范围(餐饮,住宿等)的Poi。
例如,我想打电话
Poi.accomodation POI。城市 Poi.catering
并且,对于每一个,都要进行特殊渲染。
任何帮助都是非常受欢迎的......我是铁轨上的新手......我的英语并不是更好:(
Poi模特:
class Poi < ApplicationRecord
extend FriendlyId
friendly_id :name_and_zip_code, use: :slugged
has_one :town, as: poitable
has_one :accomodation, as poitable
城镇模式:
class Town < ApplicationRecord
belongs_to :poitable
end
餐饮模式:
class Accomodation < ApplicationRecord
belongs_to :poitable
end
但我有一个错误,Poi不能同时拥有......
修改1
我做了什么?
class Poi < ApplicationRecord
extend FriendlyId
friendly_id :name_and_zip_code, use: :slugged
geocoded_by :full_address
has_one :town, as: :poitable
has_one :accomodation, as: :poitable
class Accomodation < ApplicationRecord
belongs_to :poitable, polymorphic: true
class Town < ApplicationRecord
belongs_to :poitable, polymorphic: true
在db:migration中:
class CreatePois < ActiveRecord::Migration[5.1]
def change
create_table :pois do |t|
t.string :name
t.st_point :lonlat, geographic: true
t.st_point :lonlatheight, geographic: true, has_z: true
t.belongs_to :user, index: true
t.references :poitable, polymorphic: true, index: true
end
end
end
db:migration Accomodations
class CreateAccomodations < ActiveRecord::Migration[5.1]
def change
create_table :accomodations do |t|
t.string :genre
end
end
end
db:迁移城镇
class CreateTowns < ActiveRecord::Migration[5.1]
def change
create_table :towns do |t|
t.string :department
end
end
end
在erb中,我可以创建一个Poi但是:
但是,我不能创建一个城镇或住宿......我有一个回滚:(
我该如何解决?
答案 0 :(得分:0)
我认为你的模型应该是这样的:
Poi模特:
Value
城镇模式:
Value
餐饮模式:
class Poi < ApplicationRecord
extend FriendlyId
friendly_id :name_and_zip_code, use: :slugged
has_one :town, as: :poitable
has_one :accomodation, as: :poitable
P / S:有关关联的更多信息。您可以查看此guides