Как обновить атрибуты в базе данных, используя Ruby on Rails 2.3.9 - PullRequest
0 голосов
/ 12 июля 2011

Я работаю над действием контроллера и хочу изменить запись в базе данных.

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

def save_reserve
    @pnr = Pnr.find_by_email(params[:pnr][:email])
    if (!@pnr.blank?)
      @pnr.update_attributes(params[:pnr])
    else
      @pnr = Pnr.new(params[:pnr])
      if @pnr.save
        ...
      else
        ...
      end
    end
  end

Почему @pnr.update_attributes(params[:pnr]) не работает?

Однако, если я сделаю:

      @pnr.update_attribute(:name, params[:pnr][:name])
      @pnr.update_attribute(:lastname, params[:pnr][:lastname])
      @pnr.update_attribute(:phone, params[:pnr][:phone])
      @pnr.update_attribute(:addr, params[:pnr][:addr])

это работает ... Я что-то упустил?

Спасибо!

1 Ответ

3 голосов
/ 12 июля 2011

model.update_attributes(hsh) фактически совпадает с вызовом model.attributes = hsh; model.save - он подвержен любым обратным вызовам и проверкам объекта.

model.update_attribute(field, value) непосредственно обновляет это поле в базе данных без каких-либо обратных вызовов или проверки.

Если вы проверите возвращаемое значение @pnr.update_attributes(params[:pnr]), вы, вероятно, увидите, что оно false.Вы должны сделать проверку if [...] таким же образом, как вы делаете для своего вызова save в ветви new вашего козла

...