2011-02-05 5 views
0

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

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

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

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

+1

Вы попробовали self.status = 'foo'? – apneadiving

+0

Yup. Не работает. – Synthesezia

ответ

3

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

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

Также имейте в виду, что ваши проверки не будут выполняться с 'update_attribute'; если вы хотите, чтобы ваши проверки выполнялись (и, вероятно, вы это делаете), используйте 'update_attributes' с символом« s ». [Проверить это] (http://guides.rubyonrails.org/active_record_validations_callbacks.html#validations-overview). – chadoh

0

В 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? 

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

+0

Это было почти 3 года назад, мне больше не нужна помощь. – Synthesezia

+0

Я добавил, что если кто-то может получить помощь в создании этого фрагмента – Baran

Смежные вопросы