2017-09-16 9 views
1

の准レコードがレコードを関連付けるために、セッションコントローラを工夫:ここ工夫:誰かがログインした後、私はカスタムを追加ログイン

class SessionsController < Devise::SessionsController 

    before_create :associate_calculation 

    def associate_calculation 
     Calculation.find(self.calculation_id).user_id = self.id 
     Calculation.last.save! 
    end 

end 

はリクエストパラメータです:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"JOQQcCTB9tkVegDgHP/ww8hu5qSzNWlu+4HZZ9AmQGYVO60f3BliwEYT+HKAGPsOOqbipSgj/xSqcDLqueOPZw==", "user"=>{"calculation_id"=>"48759708645478633", "email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Signin"} 

私はまたにattr_accessor :calculation_idを追加しましたUserモデル。

まだ、対応する計算は、サインインされたユーザーに関連付けられません。

私はまた、手動でユーザーに計算を添付しようとした:

class SessionsController < Devise::SessionsController 

    before_create :associate_calculation 

    def associate_calculation 
     Calculation.last.user_id = User.first.id 
     Calculation.last.save! 
    end 

end 

どちらか動作しませんでした。

答えて

1
def associate_calculation 
    c = Calculation.find(self.calculation_id) 
    c.user_id = self.id #self.id is probably also wrong. maybe current_user? 
    #Calculation.save! You can not save a class. You need to save an instance 
    c.save 
end 

クラス以外のオブジェクトを保存します。エラーがあったので、ログファイルにトレースを追加して出力を確認して、メソッドが実際に呼び出されていることを確認してください。

また、self.idがあなたが探しているものでない可能性があります。おそらくあなたはcurrent_user.idを探しているはずですか?または現在ログインしているユーザオブジェクトの名前がこの時点で何であってもかまいません。モデル関係を好む場合は、

c.user = current_user 
c.save 

上記のすべては、あなたに正しい関係があることを前提としています。ユーザーhas_many計算と計算belongs_toユーザーとデータベースがこれを反映します。

また、attr_accessor:calculate_idをUserモデルに追加しました。明らかに間違っていると、あなたは自分のモデルにメソッドを追加少し混乱

はまったく効果がありません持っているように見えるので、あなたの希望する結果を与えることはない

。たとえそれがうまくいっても、あなたのソリューションはユーザーに対して1つの計算しか許さないのですが、あなたのコードは多くの計算をすることを意味します。 これは、あなたが計算を見つけるだけでなく、作成するべきであると考えるようになります。

経路を正しく設定しましたか?拡張コントローラーを有効にするには、次のようなものが必要です

class SessionsController < Devise::SessionsController 
    def destroy 
    reset_session 
    super 
    end 
end 

# In your routes 

devise_for :users do 
    get "https://stackoverflow.com/users/sign_out", :to => "sessions#destroy", :as => "destroy_user_session" 
end 
+0

問題は「associate_calculation」が最初に呼び出されないように見えます。 – jonhue

+0

@jonhueこれは、あなたのコードでエラーが表示されない理由を説明します。だから、あなたはそのソートされた、別の質問を得る?上記を使用して、あなたの望む結果を得るべきです – jamesc

+0

@jonhue私は私の答えをかなり更新しました。実際に必要とするソリューションに手を差し伸べるのを助けてくれることを願っています – jamesc

関連する問題