我根据请求的域名拥有不同国家/地区的应用。
我有一个国家/地区模型,并根据请求加载区域设置。
现在我的用户模型存在问题。这些国家/地区具有不同的用户登录名,即一个国家/地区拥有SSO的CAS,另一个国家/地区具有正常注册。
我正在使用Devise,我想首先检查国家/地区,然后在用户模型中添加IF以检查国家/地区并加载该国家/地区的设备配置。
像
这样的东西if country == "uk"
devise :invitable, :database_authenticatable, :registerable,
:recoverable, :trackable, :validatable, :timeoutable,
:omniauthable, :omniauth_providers => [:facebook, :google_oauth2]
else
devise :invitable, :cas_authenticatable, :registerable,
:recoverable, :trackable, :validatable, :timeoutable
end
如何查看国家/地区,然后在模型中应用if语句?
提前致谢
答案 0 :(得分:1)
要记住的是,devise
之类的声明在加载模型时发生,通常只在生产模式下执行一次,因此您无法根据内容添加任何有条件的行为可能会在将来实际定义country
时发生。
您可以做的是使用“单表继承”(STI)将模型子类化为两种不同类型的用户:
class User < ActiveRecord::Base
end
class GenericUser < User
devise :invitable, ...
end
class UkUser < User
devise :invitable, ..., omniauth_providers: [ ... ]
end
这涉及向您的架构添加字符串type
列,否则影响最小。在您的控制器中,您还必须创建适当的用户类型:
@user =
case (country)
when 'uk'
UkUser.create(params[:user])
else
GenericUser.create(params[:user])
end
或该模式的一些变化。您还可以创建工厂方法:
class User
def self.create_for_country(params)
model_type =
case (params[:user][:country])
when 'uk'
UkUser
else
GenericUser
end
model_type.create(params[:user])
end