保存has_many,:在连接表中有额外属性时通过关联

时间:2012-08-06 20:19:51

标签: ruby-on-rails activerecord has-many-through

这个问题之前似乎已被多次提出,但我没有在任何地方看到令人满意的答案。

我有三个表/模型:

skill
----------------------------------
id
label


user
----------------------------------
id
username
(many other irrelevant attributes)


user_skill
----------------------------------
id
user_id
skill_id
current_proficiency_level
interest_level

所以每个用户都有各种技能,每个用户现在可以表明他对这项技能的熟练程度(也许我是PHP的2)然后你的兴趣水平是什么(但也许我想学习PHP,所以我的兴趣水平是8)。

我想知道保存这些UserSkill记录的最简单,“最默认”的方法是什么。

现在我们不担心我的User对象获取UserSkill记录的格式。让我们假设我有一些用户,我想在保存UserSkill对象时保存10 User条记录。我该怎么做?

(顺便说一下,我总体上对Rails非常熟悉,我还没有费心去找出做出这种保存的“正确”方法。所以如果你引用其他Rails术语/练习,我可能知道你在说什么。)

2 个答案:

答案 0 :(得分:0)

通常,如果要操作连接表,则使用has_many :through

请参阅此处,例如:http://guides.rubyonrails.org/association_basics.html#choosing-between-has_many-through-and-has_and_belongs_to_many

在任何一种情况下,您都会以相同的方式向用户添加技能:@user.skills << a_skill_object@user.skills = array_of_skill_objects(这会删除已与@user相关联的所有技能。)

可以在建立关联后手动设置连接表上的属性:@user.user_skills.first.current_proficiency_level = 42

答案 1 :(得分:0)

我最终做了@user.user_skills = (values)