我收到了以下代码段
Class Artist < ActiveRecord
attr_accessible :solo #boolean
def change_solo!
if self.solo == false
self.solo = true
else
self.solo = false
end
self.save
end
end
有更好的方式来写吗?提前致谢 欢呼tabaluga
答案 0 :(得分:28)
答案 1 :(得分:10)
啊哈!我可以进一步缩小它,呵呵:
def change_solo!
update_attribute :solo, !solo
end
这会自动保存。
但没有测试就不会完整:
def test_change_solo_true_to_false
Artist.create :solo => true
assert Artist.change_solo!
assert !Artist.solo?
end
def test_change_solo_false_to_true
Artist.create :solo => false
assert Artist.change_solo!
assert Artist.solo?
end
顺便说一下,上面我使用的惯例是ActiveRecord中的任何布尔属性都可以在末尾有一个问号,使其更加不言自明。
答案 2 :(得分:4)
这样的事情:
Class Artist < ActiveRecord
attr_accessible :solo #boolean
def change_solo!
self.solo = !self.solo
self.save
end
end
答案 3 :(得分:0)
仅供参考,ActiveRecord :: Base#update_attribute不运行验证,因此您很少想使用此方法。