假设“用户”想要指定他们喜欢的“城市”。建立这种关系的正确方法是什么?
选项1
社团:
User has_many :cities through :city_preferences.
CityPreferences belongs_to :user and :city.
City has_many :users through :city_prefences.
表:
User
email:string, first_name:string, last_name:string
CityPreferences
user:references, city:references
City
name:string
选项2
社团:
User has_many :city_preferences
CityPreferences belongs_to :user
表:
User
email:string, first_name:string, last_name:string
CityPreferences
user:references city:string
答案 0 :(得分:2)
您可以在has_many :sm, through: :relation
:
class User < ActiveRecord::Base
has_many :user_city_relations
has_many :preferred_cities, through: :user_city_relations, source: :city
class City < ActiveRecord::Base
has_many :user_city_relations
has_many :users, through: :user_city_relations
class UserCityRelation < ActiveRecord::Base
belongs_to :user
belongs_to :city
validates :user_id, :city_id, presence: true
并像这样使用它:
user.preferred_cities
它与has_and_belongs_to_many
非常相似,但在这里您可以自己定义连接模型,这使您可以更好地控制此关系。它也更灵活(对于期货中的新功能,如活跃/非活跃的首选城市等)
答案 1 :(得分:0)
如果我理解你的问题,你不是要求 如何实施选项1或2,而是选择选项1或选项2中的哪一个。
这取决于您的应用程序以及您是否希望每个城市都存在并作为单独的对象进行管理。