2015-10-30 5 views
0

У нас есть этот объект @current_employer, который действует немного странно. Обновление не удается в первый раз, а затем - второе.Обновление происходит с ошибкой в ​​первый раз, выполняется второй раз

(byebug) @current_employer.update(settings_params) 
false 
(byebug) @current_employer.update(settings_params) 
true 

Вот где мы инициализируем его:

@current_employer = Employer.find(decoded_auth_token[:employer_id]) 

Это просто стандартный "найти".

Текущий обходной путь:

if @current_employer.update(settings_params) || @current_employer.update(settings_params) 

... 

Кто-нибудь видел это раньше?

Update

гусеничный вниз к этой линии в "before_save" называют

# self.is_test = false if is_test.nil? 

Похоже is_test зарезервированное ключевое слово?

+0

Что ошибка вы видите от ложного обновления? –

+0

Не было сообщений об ошибке! - Решено сейчас. Спасибо за вашу помощь –

+0

Нет проблем, приятно видеть обновление –

ответ

0

решаемые

Полный обратный вызов, с фикс прокомментировал инлайн:

def set_default_values 
    self.has_accepted_terms = false if has_accepted_terms.nil? 
    self.live = true if live.nil? 
    self.account_name.downcase! 
    self.display_name ||= account_name 
    self.display_name ||= "" 
    self.contact_first_name ||= "" 
    self.contact_last_name ||= "" 
    self.phone_number ||= "" 
    self.is_test_account = false if is_test_account.nil? 
    true # FIX. The proceeding line was returning 'false', which was giving us a 'false' return value for the before_save callback, preventing the save. 
end 
0

Модель

Если это терпит неудачу в одном случае и последующие почти сразу же после этого, типичный вопрос заключается в том, что вы передаете неправильные/противоречивые атрибуты модели.

Я бы предположил, что отправляемый вами settings_params имеет значение, которое предотвращает возникновение сохранения. Вы ссылались на это с обновлением:

# self.is_test = false if is_test.nil? 

Путь, чтобы исправить это, чтобы вырезать любого из потенциально ошибочных атрибутов из вашего Params хэша:

def settings_params 
    params.require(:employer).permit(:totally, :safe, :attributes) 
end 

Ваша модель должен обновления последовательно - независимо от того, какие условия присутствуют. Если он терпит неудачу, это означает, что в потоке экономии модели будет еще одна проблема.

-

Не видя дополнительной информации, я не могу видеть, что они могут быть


Update

Лучший способ установить значения по умолчанию выглядит следующим образом:

How can I set default values in ActiveRecord?

Вы можете использовать attribute-defaults gem:

class Foo < ActiveRecord::Base 
    attr_default :age, 18 
    attr_default :last_seen do 
    Time.now 
    end 
end 
Смежные вопросы