我正在尝试检查是否已选中该复选框,如果是,则更新所有记录,其中特定列(update_checkbox
- 我的表中的布尔值)为真。
主要目的是让列中只有一条记录可以为'true',当创建/编辑新记录并选中复选框时,此记录将为true,另一条记录为false。
在models / article.rb下:
class Article < ActiveRecord::Base
if :update_checkbox == '1'
#find records where update_checkbox is true & update to false
Article.where(:update_checkbox => true).update_all(:update_checkbox => false)
end
end
我可以很好地更新我的记录,但它是'如果选中复选框'部分我遇到了问题 - 目前当我用update_checkbox
创建新记录时检查了这个标志设置为true的行不是设置为false。任何帮助表示赞赏!
答案 0 :(得分:1)
您可以通过ActiveRecord private void updateNavigationIcon() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0
&& getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
toggle.syncState();
}
}
回调
after_save
after_save :reset_update_checkbox
def reset_update_checkbox
Article.where(:update_checkbox => true).update_all(:update_checkbox => false)
end
回调将在创建/更新后运行,并将您的after_save
字段重置为false。
<强>更新强>
请考虑此解决方案。基于@ index&#39; s asnwer
update_checkbox
我很确定它能解决问题。
答案 1 :(得分:1)
您可以使用回调并执行以下操作:
after_save :reset_and_update if update_checkbox_checked?
def reset_and_update
Article.where.not(id: self.id).update_all(update_checkbox: false)
end
def update_checkbox_checked?
self.update_checkbox
end
after_create
只会将所有其他记录更新为false
。虽然after_update
会先检查update_checkbox
是否为真,然后将所有内容从self更新为false
。
使用以下方法测试数据:
def update_checkbox_checked?
puts "this checkbox value is #{self.update_checkbox}"
puts self
self.update_checkbox
end