2016-04-19 2 views
0

У меня есть модельDont установленного значение ложно обратный вызов before_create в рельсам 4

module Interspire 
    class InterspireLead < ActiveRecord::Base 
    before_create :update_contactable 

    def update_contactable 
     self.contactable = false #contactable datatype is boolean 
    end 
    end 
end 

Но когда я создать объект.

a = Interspire::InterspireLead.create(:email => "[email protected]") 
a.valid? 
    #=> true 
a.errors.full_messages 
    #=>[] 
a.save 
    #=> ROLLBACK 

Как исправить эту ошибку?

ответ

0

Ваш ответ должен быть закрытым. (Edit: Это неправильно Это не является обязательным требованием.!)

Пример из документации:

class Subscription < ActiveRecord::Base 
    before_create :record_signup 

    private 
    def record_signup 
     self.signed_up_on = Date.today 
    end 
end 
+0

Они не должны быть частными! Это не требование. – Uzbekjon

+1

Спасибо, что указали это - всегда рады исправить мои неправильные предположения! Так что это просто хорошая практика? –

+0

Yeap. Это добавляет барьер для случайного переопределения вашего метода обратного вызова или позволяет другим узнать, что это внутренняя логика, и его не следует путать. – Uzbekjon

1

возвращающие в вашем update_contactable метод:

def update_contactable 
    self.contactable = false #contactable datatype is boolean 
    true 
end 
0

Вы должны использовать другой Обратный вызов

before_save :update_contactable if: new_record? 

не

before_create 
0

ложные остановки объекта от создаваемого без каких-либо ошибок , как zhaqiang упоминалось:

def update_contactable 
    self.contactable = false 
    1 == 1 
    end 
Смежные вопросы