Как я могу написать это более "ruby-ish"? - PullRequest
2 голосов
/ 20 октября 2010

Я получил следующий фрагмент

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

Есть ли лучший способ написать это?Заранее спасибо, ура, табалуга

Ответы [ 4 ]

28 голосов
/ 20 октября 2010

Не пишите этот метод.Используйте ActiveRecord :: Base # toggle! вместо:

artist_object.toggle!(:solo)

Этот метод также существует в Rails 2, если вы еще не обновились.

10 голосов
/ 20 октября 2010

Aha!Я могу уменьшить его еще больше, хе:

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

Byкстати, выше я использую соглашение, что любой логический атрибут в ActiveRecord может иметь знак вопроса в конце, чтобы сделать его более понятным.

4 голосов
/ 20 октября 2010

Примерно так:

Class Artist < ActiveRecord 
attr_accessible :solo #boolean 
  def change_solo! 
   self.solo = !self.solo
   self.save 
  end 
end 

0 голосов
/ 21 октября 2010

Просто к сведению, ActiveRecord :: Base # update_attribute не запускает проверки, поэтому вы редко хотите использовать этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...