gpt4 book ai didi

ruby-on-rails - Rails- Ruby 实例变量

转载 作者:太空宇宙 更新时间:2023-11-03 17:32:44 24 4
gpt4 key购买 nike

所以我使用 omniauth-facebook 创建一个使用 Facebook 的登录。
这是我的 sessions_controller.rb

class SessionsController < ApplicationController

def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to "/sessions/menu"
end

def destroy
session[:user_id] = nil
redirect_to root_url
end

def new
end

def menu
puts user.name
end

end

不幸的是,我不知道如何访问菜单操作中的用户变量。你们会如何建议我这样做?

更新

class SessionsController < ApplicationController

def create
@user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = @user.id
redirect_to "/sessions/menu"
end

def destroy
session[:user_id] = nil
redirect_to root_url
end

def new
end

def menu
puts @user
end

end

即使我这样更新它,它也不起作用

最佳答案

Unfortunately I don't know how to access the user variable in the menu action. How would you guys recommend I do this?

每次在您的应用程序中发出请求以执行 SessionsController 中的操作时,都会创建一个新的 SessionsController 实例。因此,当调用 menu 操作请求时,在 create 操作期间设置的实例变量将不可用,因为现在您有一个新的 SessionsController 实例,它这就是为什么在 create 操作中设置的 @usermenu 中不可用的原因。此外,如果您在这种情况下使用 user(局部变量),那么它总是局部于定义它的方法/操作。所以即使这样也不会出现在 menu 中。

通过使用 facebook-omniauth gem,您将在 env["omniauth.auth"] 中收到 Auth Hash,然后您将使用它来创建(新用户)或希望在 from_omniauth 方法中初始化(如果是现有用户)用户。注意: env 是特定于请求的,因此 env["omniauth.auth"] 值将出现在 create 操作中但不在 menu 中。

要解决此问题,即在 menu 操作中访问创建或初始化的 facebook user,您应该使用 user_id你在 session 中存储如下:

def menu
if session[:user_id]
@user = User.find(session[:user_id])
end
end

此外,如果您还想在其他操作中访问用户,那么我建议通过使用 before_action 回调来重用代码:

class SessionsController < ApplicationController

## Pass specific actions to "only" option
before_action :set_user, only: [:menu, :action1, :action2]

#...

def menu
puts @user.name
end

private

def set_user
if session[:user_id]
@user = User.find(session[:user_id])
end
end
end

您可以在其中通过:only 选项添加特定操作

关于ruby-on-rails - Rails- Ruby 实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29224479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com