Rails 在视图呈现后登录用户
Posted
技术标签:
【中文标题】Rails 在视图呈现后登录用户【英文标题】:Rails Log user in after view rendered 【发布时间】:2013-04-12 12:06:59 【问题描述】:我有一个申请视图(索引页面),如果用户从该视图申请,用户可以留下他的凭据,将生成一个帐户,用户将登录。将显示一个概述页面(创建页面)
但如果他已经登录并应用句子“我们已将您的密码发送到...”,则无法在我的视图中显示。
所以我做了以下:
<% 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 create 中,我有以下事情要做 priv_sign_in:
# Helpers
helper_method :priv_sign_in
# Sign in User from View
private
def priv_sign_in
sign_in(@user)
end
有没有更好的办法。所以为了让事情更清楚。
当我进入创建视图时,必须这样做:
如果用户已登录 --> 隐藏部分视图 如果用户未登录 --> 显示部分视图并尝试登录
如果不清楚,请提出一些问题,非常感谢! :)
【问题讨论】:
【参考方案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 %>
【讨论】:
这很棒!这给了我一些思考的东西。我谢谢你 ! :)以上是关于Rails 在视图呈现后登录用户的主要内容,如果未能解决你的问题,请参考以下文章