2017-01-26 10 views
0

Rubyの新機能です。私は、繰り返しを使用してルビーで異なるユーザーを作成したい。私は、このメソッドを呼び出すと、これらの引数を送信したい例えばRubyで異なるユーザーを繰り返し作成する

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

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

これを実装する適切な方法は何ですか?

+0

ルビでは、大文字で始まる変数は定数とみなされます。定数はルビではそれほど変わらないので、変数として使うことはできますが、再割り当てしようとすると警告が表示されます。それはあまり慣用的ではありません。ローカル変数は、通常、より低い(ヘビ)ケースで記述されます。 – niels

答えて

1

ここに変更されたバージョンがあります。まだ認識可能でありながらそれは、あなたの目標に近いあなたを持参してください:私はおそらくこのような何かしたい

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

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

camelCase snake_case ..を使用してください。 – siegy22

+0

パラメータを意味していますか?メソッドやクラスIMHOよりも文字列の問題は少なくなります。それでも、更新されました。 –

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: '[email protected]') 

私がparams.fetch :loginを使用する理由は、それを読むのではなく、にしようとしている間に、返されていない鍵でハッシュにアクセスすることですエラーが発生します。たとえば :

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

だから、引数のハッシュは、右のキーを持っていることを強制する方法です。

関連する問題