ActiveRecord布尔值在更新时重置为默认值

时间:2013-04-05 00:12:05

标签: ruby-on-rails activerecord

我有一个布尔字段,在一个有很多直通关系:标签和标签列表的连接表中,默认值为false。

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

理论上,标签列表可以包含许多标签(反之亦然),但每个标签列表可以关闭/打开标签可见性。 这也是嵌套资源的一部分:Document has_one :tag_list

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

但是,当我将包含tag_list的文档更新为令牌输入字段时,无论以前是什么,它都会将所有标记的可见性重置为false。

任何线索都会非常感激。

1 个答案:

答案 0 :(得分: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]) }