我正在玩一个使用omniauth-facebook进行Facebook登录的简单应用程序。这是出于学习目的。我能够登录工作,我得到回调。在此之后我试图显示用户的名字,在show.html.erb中发送电子邮件但由于某种原因它总是打印空白。我正在控制器中做什么:
def create
@c_user = User.from_omniauth(env["omniauth.auth"])
@c_name = @c_user.name
@c_email = @c_user.email
@c_website = @c_user.website
logger.debug("current user has name #{@c_user.name}")
redirect_to root_url, notice: "Signed in as #{@c_name} #{@c_email}!"
end
此功能打印正确的用户名和电子邮件值,通知也会正确发送到节目视图。但是在show.html.erb中,会打印空白值。
HEre is my show.html.erb:
<p id="notice"><%= notice %></p>
<p>
<strong>Name:</strong>
<%= puts @c_name, @temp_var %>
</p>
<p>
<strong>Email:</strong>
<%= @c_email %>
</p>
<p>
<strong>Website:</strong>
<%= @c_website %>
</p>
<%= link_to "Sign out", signout_path, id: "sign_out" %>
答案 0 :(得分:0)
听起来你正在从show.html.erb
渲染root_url
。您可以只渲染show
操作,而不是这样做,您的视图就会正确填充。
您的变量在视图中不可用的原因是您正在进行重定向。执行重定向时,重定向的URL中没有任何实例变量可用。
因此,您可以按照以下方式呈现show
操作,而不是重定向:
def create
@c_user = User.from_omniauth(env["omniauth.auth"])
@c_name = @c_user.name
@c_email = @c_user.email
@c_website = @c_user.website
logger.debug("current user has name #{@c_user.name}")
flash[:notice] = "Signed in as #{@c_name} #{@c_email}!"
render :show
end