我是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)
实现这个的正确方法是什么?
答案 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
这是一种强制执行参数哈希具有正确键的方法。