2015-11-12 48 views
0

我有這樣開始的的Rails:來賓帳戶和註冊

class User < ActiveRecord::Base 
    attr_accessor :remember_token 
    has_secure_password if not_guest? 
    geocoded_by :location 
    after_validation :geocode 

在我定義的方法

def not_guest? 
    guest == false 
end 

相同的模型,用戶模型,但這樣我得到的錯誤:undefined method not_guest? for #<Class:0x0000000598cb28>

對我來說,它在與錯誤呼叫相同的模型(即行has_secure_password if not_guest?)中明確定義。我的方法有什麼問題?

+0

你確定你正在引用一個用戶的實例嗎? 在調用方法前粘上一個binding.pry並確認類型。 另外,如果您處於Rails生產模式,則需要重新啓動以對模型進行的任何更改。 –

+0

感謝您的評論。我不確定在這種情況下用戶的實例是什麼,因爲has_secure_password行不是它所調用的方法引用特定用戶的行。我使用byebug,但我不確定你想要驗證的是什麼。 – Dennis

回答

0

在模型的頂部,您可以:

has_secure_password validations: true, unless: :new_guest? 


def self.new_guest 
new { |u| u.guest = true } 
end 

您還可以查看到STI和多態關聯用於創建兩種類型的用戶(即模型/ member.rb和模型/ guest.rb爲STI)。

+0

嗨安德魯,謝謝你的建議。我嘗試過,但沒有什麼區別。錯誤是指方法未定義,而不是方法中的一些錯誤,所以我並不真正期望它的工作。我仍然得到相同的錯誤:/ – Dennis

+0

對不起,這項工作,請看看變化,讓我現在 –

+0

不幸的是,似乎has_secure_password仍然運行,即使我使用的是一個來賓帳戶......這就好像它只是忽略「除非......:new_guest?」部分。 – Dennis