0

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

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 运行,以便正确设置组织变量。

4

1 回答 1

1

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

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

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

顺便说一句:使用全局变量通常是软件设计不佳的标志。您尝试创建/更新其所属组织的用户是否可以通过关系获取器访问设置?

PS:您也在混合哈希语法。您应该使用:foo => :baror foo: :bar,但不能同时使用两者。实际上我很惊讶这完全有效;)

于 2013-10-22T09:04:52.840 回答