我怎么能写这个“ruby-ish”?

时间:2010-10-20 13:36:56

标签: ruby-on-rails ruby

我收到了以下代码段

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

4 个答案:

答案 0 :(得分:28)

不要写这个方法。请改用ActiveRecord::Base#toggle!

artist_object.toggle!(:solo)

如果尚未升级,则此方法也存在于Rails 2中。

答案 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不运行验证,因此您很少想使用此方法。