在Rails中创建为多态类型

时间:2012-03-14 05:24:10

标签: ruby-on-rails polymorphism

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

....

那么,有没有更好的方法呢?

2 个答案:

答案 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