【发布时间】:2011-12-27 05:51:30
【问题描述】:
我不明白为什么它会生成重复的recruit_profiles_skills 而不是更新。
class RecruitProfile < ActiveRecord::Base
has_many :skills, :through => :recruit_profiles_skills
has_many :recruit_profiles_skills, :dependent => :destroy
accepts_nested_attributes_for :recruit_profiles_skills, :allow_destroy => true
class Skill < ActiveRecord::Base
has_many :recruit_profiles, :through => :recruit_profiles_skills
has_many :recruit_profiles_skills, :dependent => :destroy
参数看起来像
"recruit_profile"=>{
"recruit_profiles_skills_attributes"=>[{"skill_id"=>"1", "level"=>"15"}]
}
那我做
def update
@recruit_profile.update_attributes(params[:recruit_profile])
但是,这会创建重复的关联记录。为什么这不只是更新!? 我可以使用验证来防止重复,但是它永远不会更新,因为它只是想创建一个新记录,但是新记录是无效的,因为它没有通过验证。
【问题讨论】:
-
我更新了问题。这是我得到重复的关联记录。
-
您可以尝试将
RecruitProfilesSkills的:id作为参数传递给recruit_profile_skills_attributes吗?该文档使我相信,如果它不包含属性哈希中的 id,它将创建一个新记录。 -
这将允许更新当前的关联记录,但是如果我想删除一些,添加一些并一次更改一些呢?我希望能够为 has_many 做:通过,就像我对 habtm 所做的一样。使用 habtm,我可以只 update_atrb(skill_ids) 它将删除不再存在的技能 ID 的关联,并为技能 ID 添加新的关联是新的。如果我使用与上面相同的参数进行更新并添加“:id =>”,那么它只会更新现有记录并添加新记录,但不会删除不存在的记录。我说得通吗?
-
也许我对 Rails 的要求太多了...我实际上有一个辅助方法可以按照我的意愿进行操作,但我只是假设 rails 的行为类似于 HABTM 关联的 :through 关联.
-
你想要什么都有意义。我正在查看的文档是here。如果您查看
_destroy部分,它会描述您想要的我的想法。
标签: ruby-on-rails-3 activerecord associations has-many-through