Ruby on rails 在Rails中创建为多态类型
我希望创建一个多态类(User)作为一个特定的类型,并在以后使用它时根据对象的类型设置条件Ruby on rails 在Rails中创建为多态类型,ruby-on-rails,polymorphism,Ruby On Rails,Polymorphism,我希望创建一个多态类(User)作为一个特定的类型,并在以后使用它时根据对象的类型设置条件 class SuperUser < User class Admin < User class User @user = @account.users.new(params[:user]) 那么,有更好的方法吗?您可以为用户定义polymorphic\u新的类方法 class User def self.polymorphic_new(params) case params[:
class SuperUser < User
class Admin < User
class User
@user = @account.users.new(params[:user])
那么,有更好的方法吗?您可以为用户定义
polymorphic\u新的
类方法
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])
不过,我并不关心安全问题。看看您的代码,我只是做一个假设。
参数[: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
谢谢你。我认为一个更干净的解决方案将是在模型中保留逻辑,因此标记为Mik_Die,并给出可接受的答案。
if params[:user][:type]
@user = (params[:user][:type]).constantize.new(params[:user])
@user.account = @account
else
@user = @account.users.new(params[:user]
end