我正在开始思考如何在我的项目中开始设置以下一组模型关系。我不是在寻找完整的解决方案(模型,表格,迁移等),只是帮助我朝着正确的方向前进。我通过自己的努力学到了更多:)
简而言之,我希望我的Users
(使用Devise创建)拥有一组Inclinations
代表他们对某些事物的偏好(即温暖的天气与寒冷的天气,观看体育与体育运动)等等在滑动尺度上(编码为5到-5,零除外)。每个Inclination
(或InclinationData
?)都会在一个单独的表中,其中包含名称,描述等,所有Inclinations
都会从该表中提取数据(所以我不会在我的申请中重复自己)。此外,默认情况下,每个User
每个Inclination
都会有一个InclinationData(?)
条记录。
至于设置,我需要:
Inclinations
和InclinationData
的加入表)?Users
& Inclinations
的加入表)?Profile
的单个Preferences
或User
模型一样?我永远无法弄清楚如何决定是否需要加入表格,这是我曾经尝试过的最复杂的关联。
感谢您的帮助,如果您需要更多信息可以帮助我,请与我们联系。
答案 0 :(得分: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
答案 1 :(得分: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
提取说明(即构建评级表单),并将个人评分存储起来</ p>
an_inclination= Inclination.find_by_name('weather')
user.user_inclination.create(inclination: an_inclination, preference_score: the_users_score)