我希望创建一个多态类(User)作为特定类型,稍后根据对象类型使用条件。
class SuperUser < User
class Admin < User
class User
@user = @account.users.new(params[:user])
这将创建用户作为User对象。我只能想到创建和使用@user作为特定类型的对象是通过这样做:
@user = Admin.new(params[:user]) if params[:user][:type] == "Admin"
@user = SuperUser.new(params[:user]) if params[:user][:type] == "SuperUser"
@user.account = @account
if @user.is_a? Admin
...
end
....
那么,有没有更好的方法呢?
答案 0 :(得分:2)
您可以为用户
定义polymorphic_new
类方法
class User
def self.polymorphic_new(params)
case params[:type]
when "Admin" then Admin.new(params)
when "SuperUser" then SuperUser.new(params)
else new(params)
end
end
然后在控制器中
@user = User.polymorphic_new(params[:user])
我不担心安全问题..
答案 1 :(得分:0)
看看你的代码,我做了一个假设。 params[:user][:type]
与类名相同。如果是这样的话,下面的代码应该可行。
if params[:user][:type]
@user = (params[:user][:type]).constantize.new(params[:user])
@user.account = @account
else
@user = @account.users.new(params[:user]
end