Rails:用户has_many CityPreferences模型关联

时间:2013-12-19 18:18:55

标签: ruby-on-rails ruby-on-rails-4 model-associations

假设“用户”想要指定他们喜欢的“城市”。建立这种关系的正确方法是什么?

选项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

2 个答案:

答案 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中的哪一个。

这取决于您的应用程序以及您是否希望每个城市都存在并作为单独的对象进行管理。