_changed? в рельсах 3.1.0 приложение не работало - PullRequest
0 голосов
/ 10 февраля 2012

Ниже приведен код для обновления в контроллере счетов:

  def update
      @invoice = Invoice.find(params[:id])
      if @invoice.approved_by_corp_head_changed?
        @invoice.approve_date_corp_head = Time.now
        @invoice.corp_head_id = session[:user_id]
      end
      if @invoice.update_attributes(params[:invoice], :as => :roles_update)
        redirect_to URI.escape("/view_handler?index=0&msg=Updated")
      else
        flash.now[:error] = 'Not saved!'
        render 'edit'
      end
  end

Правильно сохранено значение Approve_by_corp_headПроблема в том, что if @invoice.approved_by_corp_head_changed? всегда было ложным, и цикл IF никогда не выполнялся.В консоли рельсов @ invoice.approved_by_corp_head_changed?Значение true, если значение изменилось.Что здесь может быть не так?Спасибо.

1 Ответ

3 голосов
/ 10 февраля 2012

Поскольку вы выбираете объект непосредственно из базы данных, он совершенно новый, поэтому нет причин, по которым его можно было бы каким-либо образом изменить.

Более того, _changed? доступно до тех пор, пока объект не будет сохранен.

Один из вариантов - получить изменения от params, но не обновлять ваш объект напрямую. Этот вопрос обсуждался здесь .

Sidenote: почему вы делаете:

redirect_to URI.escape("/view_handler?index=0&msg=Updated")

вместо:

redirect_to path_name_path(:index => 0, :msg => "Updated")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...