正しい質問をしているかどうかさえわかりません。問題に間違ってアプローチしている可能性がありますが、基本的には次のような状況があります。
obj = get_user(params)
obj.profile => {:name => "John D", :age => 40, :sex => "male"} #Has to be of class Hash
obj.profile.name => "John D"
obj.profile[:name] => "John D"
obj.profile.job => nil
基本的に、これらの条件をすべて満たす必要がありますが、これにどのようにアプローチすればよいかわかりません (今日 Ruby を学習したばかりです)。
内部変数にアクセスするためのドット表記に注意してください。それ以外の場合は、プロファイルをシンボルのハッシュにするだけです。だから私は2つの方法を試しましたが、そこにたどり着くだけです
方法 1:プロファイルを OpenStruct にする
これにより、ドット表記を使用して名前、年齢、性別にアクセスできるようになり、キーが存在しない場合は自動的に nil が返されますが、obj.profileはHashではなくOpenStruct型です。
方法 2:プロファイルを独自のクラスにする
これにより、それらをインスタンス変数として設定し、存在しない場合はmethod_missingを使用して nil を返すことができます。しかし、私は再びobj.profileが正しいタイプ/クラスではないという問題に遭遇しました
足りないものはありますか?おそらく区別する方法はありますか
obj.profile
obj.profile.name
ゲッター関数で、ハッシュまたはその他のいずれかを返しますか?
プロファイルのカスタム クラスによって返されるものを変更して、代わりにハッシュを返すことはできますか?
obj.profile の get 関数でargsと **kwargs をチェックしようとしましたが、どちらも役に立たないようです。