无法在View中访问Controller变量

时间:2013-12-08 06:53:17

标签: ruby-on-rails views controllers

我正在玩一个使用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" %>

1 个答案:

答案 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