在类加载之前运行方法

时间:2013-10-22 07:58:00

标签: ruby-on-rails

我有一个类用户,我想在其中进行条件验证:

if $organization.first_name_last_name
   validates :name_first, presence: true,
                  length:     { maximum: 50 },
                  :if => :local_authentication?
   validates :name_last, presence: true,
                  length:     { maximum: 50 },
                  :if => :local_authentication?

但是,此全局组织变量是包含子域的特定设置的对象,并在应用程序控制器的before_filter中初始化。

class ApplicationController < ActionController::Base
   before_filter :load_organization
   ...
   def load_organization
      $organization = Organization.find_by_subdomain(request.subdomain).settings
   end

我的问题是如何在加载User类之前运行load_organization,以便正确设置组织变量。

1 个答案:

答案 0 :(得分:1)

没有办法,这可行,因为User类不会在请求之间重新加载,至少不会在生产中重新加载。

您已使用:if参数进行验证。您也可以将其用于设置:

validates :names_first, presence: true,
                        if: -> {
                          $organization.first_name_last_name &&
                          local_authentication?
                        }

BTW:使用全局变量通常是软件设计不良的标志。您尝试创建/更新它所属的组织的用户不是您可以通过关系getter访问设置吗?

P.S。:您也在混合哈希语法。您应该使用:foo => :barfoo: :bar,但不能同时使用两者。实际上我很惊讶这个有用;)