如果选中复选框,则更新记录

时间:2016-06-01 01:24:53

标签: ruby-on-rails ruby activerecord checkbox rails-activerecord

我正在尝试检查是否已选中该复选框,如果是,则更新所有记录,其中特定列(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。任何帮助表示赞赏!

2 个答案:

答案 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