Ruby on rails 在Rails中创建为多态类型

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[:

我希望创建一个多态类(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[: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