Rails在渲染视图后记录用户

时间:2013-04-12 12:06:59

标签: ruby-on-rails ruby view devise

我有一个应用视图(索引页面),如果用户可以从该视图应用将生成一个用户将登录的帐户,则用户可以保留其凭据。并将显示一个概述页面(创建页面)< / p>

但如果他已登录并应用“我们已将密码发送给...的句子”,则无法在我的视图中显示。

所以我做了以下事情:

  <% unless user_signed_in? %> 
    <div class="row">
      <div class="three columns">
        <strong><%= t("apply.create.labels.password") %></strong>:
      </div>
      <div class="nine columns">
        <%= t("apply.create.labels.emailed_password_html", :link => mail_to(@user.personal_info.e_mail))%>
        <%= link_to(t("apply.create.labels.choose_password"), user_profile_path) %>
      </div>
    </div>
    <!-- Try to Sign in User -->
    <% priv_sign_in %>
   <% end %>

这段代码是因为。如果用户应用@user信息已填写,但他只能在生成此部分视图后登录。

在我的applycontroller创建中,我有以下做priv_sign_in:

 # Helpers
  helper_method :priv_sign_in

  # Sign in User from View
  private
  def priv_sign_in
    sign_in(@user)
  end

还有更好的方法吗?所以努力让事情变得更加清晰。

当我进入创建视图时,必须完成此操作:

如果用户已登录 - &gt;隐藏视图的一部分 如果用户未登录 - &gt;显示部分视图并尝试登录

如果不清楚,请提出一些问题,非常感谢! :)

1 个答案:

答案 0 :(得分:1)

你不应该在你的观点中处理这么多逻辑。

控制器:

@was_signed_in = user_signed_in?
sign_in(@user) unless @was_signed_in

查看:

<% unless @was_signed_in %> 
  <div class="row">
  <div class="three columns">
    <strong><%= t("apply.create.labels.password") %></strong>:
   </div>
   <div class="nine columns">
     <%= t("apply.create.labels.emailed_password_html", :link => mail_to(@user.personal_info.e_mail))%>
     <%= link_to(t("apply.create.labels.choose_password"), user_profile_path) %>
   </div>
 </div>
<% end %>