【问题标题】:Create different users in Ruby with iteration通过迭代在 Ruby 中创建不同的用户
【发布时间】:2017-01-26 15:48:56
【问题描述】:

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

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

【问题讨论】:

  • 请注意,在 ruby​​ 中,以大写字母开头的变量被视为常量。并不是说这很重要,因为常量在 ruby​​ 中并不是真正的常量,所以您可以将它们用作变量,但如果您尝试重新分配它们会产生警告。而且它不是很地道。局部变量通常写成小写(蛇形)。

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


【解决方案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)

【讨论】:

  • 你的意思是参数吗?恕我直言,字符串的问题比方法或类的问题要小。不过,更新了。
【解决方案2】:

我可能会这样做:

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

所以这是一种强制参数散列具有正确键的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2021-03-13
    • 2012-10-04
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多