gpt4 book ai didi

ruby-on-rails - 用于 Controller 的 Rails 通用过滤器

转载 作者:数据小太阳 更新时间:2023-10-29 08:48:41 32 4
gpt4 key购买 nike

我有一些用于两个 Controller 的通用过滤器。过滤器完全相同,但两个 Controller 中的跳过条件不同。

在 u_controller 中:

  before_filter :require_login,:get_notification,:get_credits

skip_before_filter :require_login , :only => [:index,:registration,:login,:oauthlogin,
:forgotpassword,:invite_mail,:newpassword,
:changepassword,:invite,:verify,:terms,:privacy,:about]
skip_before_filter :get_notification , :only => [:registration,:login,:oauthlogin,
:forgotpassword,:invite_mail,:newpassword,
:changepassword,:invite,:verify]
skip_before_filter :get_credits , :only => [:registration,:login,:oauthlogin,
:forgotpassword,:invite_mail,:newpassword,
:changepassword,:invite,:verify,:terms,:privacy,:about]

在 q_controller 中:

before_filter :require_login,:get_notification,:get_credits,:require_auth

skip_before_filter :get_notification,:get_credits,:require_auth,
:only => [:topic_suggest,:upload,:new_question,:qdb,:post_new_question,:evaluate_answer,:image]
skip_before_filter :require_auth, :only => [:add]

在这种情况下,解决以下问题的最佳做法是什么:

  1. 避免在两个 Controller 中重复声明过滤器
  2. 使用更简洁的代码代替 skip_before_filter

最佳答案

你真的有两个问题,所以我会分别回答:

1:为了避免 before_filter 重复,您可以将公共(public)声明提取到模块中并将其包含在两个 Controller 中:

module BeforeFilters
def self.included(base)
base.class_eval do
before_filter :filter1, :filter2
end
end
end

class UController
include BeforeFilter
end

class QController
include BeforeFilter
end

2:我认为你必须在这么多 Action 中跳过 before_filter 的原因只是你在一个 Controller 中有太多它们。我对您的建议是将操作分离到两个或多个 Controller ,并根据需要在每个 Controller 中的过滤器之前声明。这将使您免于所有 skip_before_filter 声明。

关于ruby-on-rails - 用于 Controller 的 Rails 通用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474811/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com