使用迭代在Ruby中创建不同的用户

时间:2017-01-26 15:48:57

标签: ruby-on-rails ruby rake rake-task

我是Ruby的新手。我想使用迭代在ruby中创建不同的用户。

def createuser(*args)
      obj = H['userClass']
      obj.login                 = H['login']
      obj.password              = a.password = @default_passwd
      obj.email                 = 'test@example.com'
      obj.role                  = MasterUser::ROLE_MASTER_USER
end

例如,我想调用此方法并发送这些参数:

H = Hash["userClass" => MasterUser.new, "login" => admin]
createuser(H)

实现这个的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

这是修改后的版本。它应该让你更接近你的目标,同时仍然可识别:

def create_user(parameters)
  klass         = parameters['user_class']
  user          = klass.new
  user.login    = parameters['login']
  user.password = @default_passwd
  user.email    = 'test@example.com'
  user.role     = klass::ROLE_MASTER_USER
  user
end

user_params = {"user_class" => MasterUser, "login" => 'admin'}
new_user = create_user(user_params)

答案 1 :(得分:0)

我可能会这样做:

class UserFactory
  attr_accessor :user
  def initialize(klass)
    @user = klass.new
  end
  def create(params = {})
    user.login = params.fetch :login
    user.password = params.fetch :password, 'default_password'
    user.email = params.fetch :email
    # user.role should just be initialised on the klass.new call, no need to do that here
    # etc...
  end
end

class MasterUser
  ROLE = 'master_role'
  attr_accessor :login, :password, :email, :role
  def initialize
    self.role = ROLE
  end
end

您可以这样称呼:

UserFactory.new(MasterUser).create(login: 'george', password: 'secret', email: 'me@george.com')

我使用params.fetch :login而不仅仅是阅读它的原因是,在Ruby访问哈希时,密钥不会返回nil,而在尝试时到fetch它会抛出一个错误。 例如:

a = {}
a[:foo] #=> nil
a.fetch :foo #=> throw a KeyError

这是一种强制执行参数哈希具有正确键的方法。