2017-09-16 118 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_idUser模型。

但是,相应的计算并未与登录用户相关联。

我也试着计算手动连接到用户:

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:calculation_id添加到用户模型。

这显然是错误的,永远不会给你想要的结果,所以它看起来就像你有一点点混乱

只是添加到您的模型的方法不会有任何影响的。即使它确实起作用,您的解决方案也只允许为用户进行一次计算,但您的代码意味着您将进行许多计算。 这导致我认为你不应该只是找到一个计算,但应该创建一个?

您是否正确设置了路线?对于扩展控制器生效,您将需要somethign像

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