我认为它更像是一个"模型设计"问题而非铁路问题。
为了清楚起见,这里是业务逻辑:我和Venues,我想实现多个API来获取有关这些场所的数据。所有这些API有很多共同之处,因此我使用了STI。
# /app/models/venue.rb
class Venue < ApplicationRecord
has_one :google_api
has_one :other_api
has_many :apis
end
# /app/models/api.rb
class Api < ApplicationRecord
belongs_to :venue
end
# /app/models/google_api.rb
class GoogleApi < Api
def find_venue_reference
# ...
end
def synch_data
# ...
end
end
# /app/models/other_api.rb
class OtherApi < Api
def find_venue_reference
# ...
end
def synch_data
# ...
end
end
这一部分有效,现在我试图添加的是照片到场地。我将从API获取这些照片,并且我意识到每个API可能都不同。我也考虑过使用STI,我最终会得到类似的东西
# /app/models/api_photo.rb
class ApiPhoto < ApplicationRecord
belongs_to :api
end
# /app/models/google_api_photo.rb
class GoogleApiPhoto < ApiPhoto
def url
"www.google.com/#{reference}"
end
end
# /app/models/other_api_photo.rb
class OtherApiPhoto < ApiPhoto
def url
self[url] || nil
end
end
我的目标是在最后拥有这个 #/ app / model /venue.rb 类地点&lt; ApplicationRecord has_one:google_api has_one:other_api has_many:apis has_many:photos:through =&gt; :蜜蜂 端
# /app/views/venues/show.html.erb
<%# ... %>
@venue.photos.each do |photo|
photo.url
end
<%# ... %>
而photo.url会给我正确的格式,这取决于api。
随着我在整合方面的深入,似乎有些不对劲。如果我必须Api
has_many :google_api_photo
,那么每个Api都会有GoogleApiPhoto。什么对我没有意义。
知道我应该如何从这里开始吗?
答案 0 :(得分:0)
我想我解决了它。
将此添加到Baz
response
致电venue.rb
,根据has_many :apis, :dependent => :destroy
has_many :photos, :through => :apis, :source => :api_photos
venue.photos[0].url
字段拨打正确的班级