Как я могу обновить другую модель с помощью обратного вызова? - PullRequest
3 голосов
/ 07 января 2011

Я работаю с моделью под названием Recover. Перед созданием модели я хотел бы сохранить логический атрибут Combo.occupied = true, используя атрибут Recover.combo_id в качестве ссылки.

Кажется, мой SQL правильно выполняет запрос, но не сохраняет этот атрибут. Как я могу сохранить Combo.occupied = true?

recover.rb:

before_create: checkin

1010 * защищен *

def checkin x = Combo.find_by_id (combo_id) .occupied = правда
конец

Консоль Rails:

Запущен POST "/ восстанавливает" для 127.0.0.1 в 2011-01-06 17:07:24 -0800
Обработка RecoversController # создать как HTML
Параметры: {"utf8" => "✓", "Authenticity_token" => "o1Iu3Y9 / rVBOZPoDUgVP / tRfQ8GxbdWC40DbPq9YxUE =", "Восстановление" => { "combo_id" => "4", "Электронная почта" => "jz@marin.edu"}, "commit" => "Создать восстановление"} Восстановление Load (0.2ms) ВЫБРАТЬ "восстанавливает". "Id" ОТ "выздоравливает" ГДЕ ("восстанавливает". "электронная почта" = 'justin.zollars@marin.edu') LIMIT 1
Восстановить нагрузку (0,1 мс) SELECT "восстанавливает". "id" ОТ "восстанавливает" ГДЕ ("восстанавливает". "combo_id" = 4) LIMIT 1
Комбинированная нагрузка (0,5 мс) ВЫБЕРИТЕ «комбо». * ОТ "комбо" ГДЕ ("комбо". "Id" = 4) ВСТАВИТЬ В ОГРАНИЧЕНИЕ 1 AREL (0,5 мс) "восстанавливает" ("locker_number", "email", "запросы", "созданный_ат", "updated_at", "combo_id") ЗНАЧЕНИЯ (NULL, justin.zollars@marin.edu, NULL, '2011-01-07 01: 07: 24.287072', «2011-01-07 01: 07: 24.287072», 4) Перенаправлено на http://localhost:3000/recovers/14 Завершено 302 Найдено в 119мс

RecoversController # создать

def create @recover = Recover.new (params [: recovery])

respond_to do |format|
  if @recover.save
    format.html { redirect_to(@recover, :notice =>

'Восстановление успешно создано.')} format.xml {render: xml => @recover,: status =>: создан,

: location => @recover}

  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @recover.errors, :status =>

: unprocessable_entity} конец

end  

конец

1 Ответ

5 голосов
/ 07 января 2011

Вам нужно вызвать save для записи нового значения в базу данных:

def checkin
  combo = Combo.find_by_id(combo_id)
  combo.occupied = true
  combo.save!
end

Это проще, если вы используете update_attribute.Кроме того, если у вас есть отношение own_to, вы можете обойтись без find:

belongs_to :combo

def checkin
  if combo # true unless combo_id is nil
    combo.update_attribute(:occupied,true)
  end
end

Обратите внимание, что update_attribute обходит проверку.Если вам нужно подтвердить, используйте update_attributes(:occupied=>true) вместо.

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