Обновление записей в базе данных с использованием form_tag - PullRequest
1 голос
/ 16 ноября 2011

На странице просмотра я использую form_tag для создания формы, которая будет передавать строку идентификаторов из скрытого поля в код контроллера.

В моем коде контроллера я перебираю массив идентификаторов, чтобы обновить каждую запись, содержащую этот идентификатор в таблице выражений. Но приведенный ниже код не работает. Буду очень признателен, если кто-нибудь подскажет, что не так с кодом ниже.

def update_expression
  @emi_ids_array = params[:emi_ids].split(/,/)
  @sub_id = params[:sub_id]

  @emi_ids_array.each do |emi_id|
    @existing_exp = Expression.find(:first, :conditions => [ "EXT_EMI_ID = ? and EXT_SUB_FK = ?", emi_id, @sub_id])
    @expression = @existing_exp.update_attributes(
      :EXT_SUB_FK => @sub_id,
      :EXT_PRESENCE => "present",
      :EXT_STRENGTH => "weak",
      :EXT_EMI_ID => emi_id
    )
  end
end

Ответы [ 2 ]

0 голосов
/ 24 ноября 2011

Нашли временное решение.«update_attributes» не работает, поэтому я выбрал атрибут «update_all»

 Expression.update_all({:EXT_PRESENCE => "present", :EXT_STRENGTH => "weak"},['EXT_EMI_ID = ? and EXT_SUB_FK = ?', emi_id, @sub_id])

Надеюсь, это может пригодиться кому-то еще

0 голосов
/ 16 ноября 2011

Попробуйте преобразовать массив идентификаторов (и sub_id) в целые числа.

Это обнаружение сбоя объекта или обновление? Выведите @expression.errors после вызова обновления, чтобы проверить, не происходит ли каких-либо проверок.

Есть ли причина для всех переменных экземпляра? Вам не нужны @, если переменная не выходит за рамки этого метода. Кроме того, элемент @expression кажется излишним, вы просто дублируете объект @existing_exp, вам не нужно помещать возврат в новый объект, особенно если он заменяется каждый раз, когда цикл все равно выполняется.

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