ActiveRecord: изменить и сохранить состояние объекта внутри модели - PullRequest
3 голосов
/ 27 октября 2010

У меня есть следующий код:

  def incoming_acceptation(incoming_code)
    if invite_code == incoming_code
      accepted = true
      self.save
      true
    else
      false
    end
  end

Но оно не изменяется и сохраняет принятое значение true, оно остается в предыдущем состоянии, false.

@i.incoming_acceptation(incoming_code) => true
@i.accepted => false

Ответы [ 2 ]

6 голосов
/ 27 октября 2010

Рекомендую:

def incoming_acceptation(incoming_code)
  update_attribute(:accepted, true) if invite_code == incoming_code
end

update_attribute изменит и сохранит этот атрибут. Также есть update_attributes (обратите внимание на s), который принимает Hash для одновременного изменения нескольких атрибутов:

@obj.update_attributes(:accepted => true, :accepted_at => Time.now)

Примечание: update_attribute и update_attributes оба возвращают true, когда изменение и сохранение прошли успешно, как в вашем примере.

3 голосов
/ 27 октября 2010
self.accepted = true
...