2013-04-05 63 views
0

我有一个布尔型字段,在具有很多穿透关系:标记和标记列表的连接表中,其默认值为false。ActiveRecord布尔重置为更新时的默认值

add_column :taggings, :tag_visible, :boolean, :default => false 

该理论认为,一个标签列表可以有很多标签(反之亦然),但标签的知名度可以关闭/每标签列表上。 这也是一个嵌套资源的一部分:Document has_one :tag_list

大多数情况下,这是所有的工作。默认值是在创建时设置的,我正在用ajax调用更新每个实例。

但是,当我更新包含tag_list作为标记输入字段的文档时,它将所有标记的可见性重置为false,而不管它以前是什么。

任何线索将不胜感激。

+0

尝试看看通过更新和的Tagging确保tag_visible'的'值就是你想要的PARAMS。 – jvnill 2013-04-05 00:17:40

+0

它不在那里,这是理想的我想要的。我宁愿这个领域没有受到更新。 – 2013-04-05 00:21:18

+1

生成的SQL看起来是什么造成了这种情况?导致这种情况的ActiveRecord代码是什么样的? – Mischa 2013-04-05 00:31:57

回答

0

原来,在我的tag_list模型中的标记token_input setter中,我正在删除并在标记模型中重新创建新记录,而不是更新它。

旧代码:

self.taggings = Tag.ids_from_tokens(tokens, user_id).each_with_index.map {|t,i| Tagging.new(:tag_id => t, :tag_colour => tag_colours[i % tag_colours.size]) } 

修复:

self.tag_ids = Tag.ids_from_tokens(tokens, user_id) 
self.taggings.each_with_index {|t,i| t.update_attributes(:tag_colour => tag_colours[i % tag_colours.size]) } 
相关问题