Rails DRY 问题:控制器和视图中需要相同的代码

发布于 2024-11-02 20:14:30 字数 1203 浏览 2 评论 0原文

我的页面中有以下登录检查:

class LoungeController < ApplicationController
  before_filter :confirm_logged_in
  def index
  end 
end

同时在此处定义了 confirm_logged_in

class ApplicationController < ActionController::Base
  protect_from_forgery

  protected

  def confirm_logged_in
    return true if current_user
    redirect_to(:controller => 'access', :action => 'login')
    return false   # halts the before_filter
  end

  def current_user
    return false unless session[:user_id]
    user = User.find(session[:user_id])
    return false unless user
    (user.display_name == session[:user_display_name]) ? user : nil
  end  
end

现在,我想在 app/views/layouts/application.html 中也使用 confirm_logged_in .erb

<% if confirm_logged_in %>
   <div id="logged_in_as">You are logged in as <%= session[:user_display_name] %></div>
   <div id="logout"><%= link_to("Logout", {:controller => "access", :action => "logout"}, :id => "logout_link") %></div>
<% end %>

您建议如何解决这个问题?我应该在哪里定义 confirm_logged_in

I have the following login check in my page:

class LoungeController < ApplicationController
  before_filter :confirm_logged_in
  def index
  end 
end

while confirm_logged_in defined here:

class ApplicationController < ActionController::Base
  protect_from_forgery

  protected

  def confirm_logged_in
    return true if current_user
    redirect_to(:controller => 'access', :action => 'login')
    return false   # halts the before_filter
  end

  def current_user
    return false unless session[:user_id]
    user = User.find(session[:user_id])
    return false unless user
    (user.display_name == session[:user_display_name]) ? user : nil
  end  
end

Now, I want to use confirm_logged_in also in app/views/layouts/application.html.erb:

<% if confirm_logged_in %>
   <div id="logged_in_as">You are logged in as <%= session[:user_display_name] %></div>
   <div id="logout"><%= link_to("Logout", {:controller => "access", :action => "logout"}, :id => "logout_link") %></div>
<% end %>

How would you suggest to solve this problem ? Where should I define confirm_logged_in ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你如我软肋 2024-11-09 20:14:30

您可以使用 helper_method

controller.rb

helper_method :confirm_logged_in, :current_user

protected

def confirm_logged_in
  # code...
end

def current_user
  # code...
end

You can use helper_method

controller.rb

helper_method :confirm_logged_in, :current_user

protected

def confirm_logged_in
  # code...
end

def current_user
  # code...
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文