1

我正在为如何开始在我的项目中设置以下一组模型关系而绞尽脑汁。我不是在寻找完整的解决方案(模型、表格、迁移等),只是为了让我朝着正确的方向前进。我通过自己的努力学到了更多:)

简而言之,我希望我的Users(用 Devise 创建的)有一组Inclinations代表他们对某些事情(即温暖的天气与寒冷的天气,观看运动与运动等)的偏好(编码为 5 到 -5) ,零除外)。每个Inclination(或InclinationData?)都将在一个单独的表中,并带有名称、描述等,并且所有人Inclinations都将从该表中提取数据(因此我不会在整个应用程序中重复自己)。此外,默认情况下,每个User人都有一个Inclination记录。InclinationData(?)

至于设置,我需要:

  • 5 个表(3 个主表和两个连接表)?
  • 只有三个(主要三个模型)?
  • 四个(主要三个模型和一个连接表InclinationsInclinationData)?
  • Users四个(主要的三个模型和&的连接表Inclinations)?
  • 也许更简单的东西,比如绑定到的单人Profile或模型?PreferencesUser

我永远无法弄清楚如何决定是否需要加入表,这是我尝试过的最复杂的关联。

感谢您的帮助,如果您需要更多信息来帮助我,请告诉我。

4

2 回答 2

1

你说,所有人Users都有相同的集合Inclinations。根据eabraham,您可以将Inclinations模型/表的描述和用户评级放在连接表中:UserInclination

class User < ActiveRecord::Base
  has_many :users_inclinations
  has_many :inclinations, through: :users_inclinations

end

class UsersInclination < ActiveRecord::Base
  belongs_to :users
  belongs_to :inclinations

  attr_accessible :user_id, :inclination_id, preference_score
end

class Inclination < ActiveRecord::Base
   has_many :users_inclinations

   attr_accessible :description, :name, :low_label, :high_label
end

因此,您可以从中提取描述(即构建评分表)Inclinations并存储单个评分

an_inclination= Inclination.find_by_name('weather')
user.user_inclination.create(inclination: an_inclination, preference_score: the_users_score)
于 2013-05-31T07:19:36.370 回答
1

我想我已经通过您的要求进行了推理:

用户 has_many UserInclinations 和 Inclinations has_one UserInclinations。粗略地说,模型应该如下所示:

class User < ActiveRecord::Base
  has_many :user_inclinations

  #default Devise attr_accessible
end

class UserInclinations < ActiveRecord::Base
  belongs_to :users
  belongs_to :inclinations

  attr_accessible :user_id, :inclination_id, preference_score
end

class Inclination < ActiveRecord::Base
  has_one :user_inclination

  attr_accessible :preference
end
于 2013-05-31T01:26:15.413 回答