簡體   English   中英

通過迭代在Ruby中創建不同的用戶

[英]Create different users in Ruby with iteration

我是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)

實現此目的的正確方法是什么?

這是修改后的版本。 它應該使您更接近目標,同時仍然可以被識別:

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)

我可能會做這樣的事情:

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

因此,這是一種強制參數哈希具有正確鍵的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM