Установка атрибута в модели - PullRequest
0 голосов
/ 05 февраля 2011

Итак, у меня есть приложение, которое просто принимает несколько RSS-каналов и сохраняет их в таблице. Он проверяет несколько вещей в каждой записи для условий, а затем устанавливает атрибут на основе условия.

if self.value1 > self.value2 then
    :status => 'foo'
else
    :status => 'bar'
end

Я все еще немного новичок с Ruby / Rails, и установка статуса вызывает исключение, но я не знаю почему.

Любая помощь будет отличной.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2011

Когда вы говорите «устанавливает атрибут», я предполагаю, что вы имеете в виду, что это еще один столбец в таблице.Если это так, это должно работать:

if self.value1 > self.value2
    update_attribute :status, "foo"
else
    update_attribute :status, "bar"
end

Обозначение "ракета" (:this => "that") используется при создании экземпляра объекта или при обновлении более одного атрибута (self.update_attributes :animal => "kitten", :sound => "Roar!").Это нотация, которую использует Hash .

Вы также можете просто использовать status = "foo", но это установит атрибут без сохранения, поэтому вам также придется вызывать self.save.update_attribute делает оба в одной аккуратной упаковке.

0 голосов
/ 02 декабря 2013

В Rails 4 я сделал следующий метод:

def update_test
  if self.value1 > self.value2
      self.status="foo"
  else
      self.status= "bar"
  end
end

и добавил фильтр before_update в модель.

before_update :update_test, :if => :test_changed?

В этом методе нам не нужно вызыватьsave или update_attributes это будет сделано в одном запросе.

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