0

私のモデルのメールトークンには

def self.token_valid(token, type)
   return unless token.present?
   token = EmailToken.where("token = ? and verification_type = ? and confirmed = 'false' and created_at <= ?", token, type, EmailToken.expires).includes(:user).first
   user = token.user
 end

そして、このメソッドをコントローラーから呼び出します

def confirm_password_reset
    @user = EmailToken.token_valid(params[:pass_reset],"password")
    render 'reset_password' if @user
end

ユーザーに関連付けようとせずにテストしたので、条件は有効です。私がやろうとしているのはtoken_valid、トークンを確認し、トークンとそれに関連付けられたユーザーの両方を返すメソッドを取得することです。belongs_tohas_manydelも定義されています。
Current error : undefined method user for nil:NilClass
ありがとう。

4

2 に答える 2

2

これを行う最善の方法は、モデルがトークンを返すようにし、reset_password ビューで @user obj を調べることです。

<%= @user.inspect %>

私の推測では、空の配列が返されます。sqlite を使用している場合は 、sqlite の boolean データ型に関するこの参照ドキュメントを読むことをお勧めします。そのため、確認済みフィールドを false の場合は 0 に、true の場合は 1 に変更することをお勧めします。

token = EmailToken.where("token = ? and verification_type = ? and confirmed = 0 and created_at <= ?", token, type, EmailToken.expires).includes(:user).first

そうでない場合は、表のスペルミスを確認してください。

于 2013-03-13T19:19:52.250 に答える
1

この行:

 token = EmailToken.where("token = ? and verification_type = ? and confirmed = 'false' and created_at <= ?", token, type, EmailToken.expires).includes(:user).first

nil を返します。

于 2013-03-13T10:58:10.297 に答える