如何使用条件从视图中呈现视图?

时间:2016-07-25 19:02:21

标签: ruby-on-rails html5 view

我正在测试RoR,目前我正在尝试找出允许有效会话的用户跳过登录的功能。

登录按钮通常会提示您进入登录页面,而我想让它成为具有会话的人跳过它并立即使用条件语句重定向到show视图。 (通过current_user检查) (如果您需要任何其他代码,请注释)

这是登录视图

<%= form_for :session, url: '/login' do |s| %>
<%= s.text_field :username, :placeholder => 'Username' %>
<%= s.password_field :password, :placeholder => 'Password' %>
<%= s.submit "Login" %>

<% if current_user %>
    <!-- What do i write here? -->
    <!-- Maybe I should put this in a controller? -->
    <% end %>

<% if flash[:notice] && current_user %>
    <div class="notice"><%= flash[:notice] %></div>
<% end %>

这是包含current_user函数的应用程序控制器。 (以防万一)

class ApplicationController < ActionController::Base
protect_from_forgery with: :exception

helper_method :current_user

 def current_user
   @current_user ||= User.find_by(id: session[:id]) if session[:id]
 end
end

2 个答案:

答案 0 :(得分:2)

不确定你的SessionsController是什么样的,但你可以添加如下内容:

class SessionsController < ActionController::Base
  before_action :check_current_user

  def check_current_user
    redirect_to :root, success: "You are already logged in." if current_user
  end
end

然后,您可以在登录视图中删除if current_user语句。对于您的登录链接,您可以写:

<%= link_to 'Login', new_session_path unless current_user %>

这样,登录按钮仅显示current_user是否为零。

另外,请查看Rails Tutorial Chapter 8: Basic Login以获取更多信息

答案 1 :(得分:1)

如果您只想向未登录的用户显示登录按钮,您可以在视图中使用render方法渲染部分:

<% unless current_user %>
  <%= render 'login_form' %>
<% end %>

然后你需要一个名为&#39; _login_form&#39;的文件。在您的视图目录中:

<%= form_for :session, url: '/login' do |s| %>
<%= s.text_field :username, :placeholder => 'Username' %>
<%= s.password_field :password, :placeholder => 'Password' %>
<%= s.submit "Login" %>