問題タブ [openstruct]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3565 参照

ruby - openstruct を使用した未定義のメソッド 'each_pair'

私は OpenStruct を使用して、次のような json を操作していますOpenStruct.new '{"age":100,"name":"name"}':

NoMethodError: undefined method `each_pair' for "{\"age\":100,\"name\":\"name\"":String

このコードはしばらく前に機能していましたが、現在は機能していません。

Ruby 2.1を使用しています

0 投票する
0 に答える
603 参照

ruby - JSON 文字列を解析して属性を持つオブジェクトにする

現在、私のアプリは次の方法で JSON を解析しています。

しかし、このアプローチには問題があります。

  1. JSON では、次のようなルートレベルの配列が許可されますが[{id: 1, name: "first"}, {id: 2, name: "second"}]、OpenStruct ではそれらを処理して例外をスローすることはできません。
  2. OpenStruct はネストされた要素を処理しません。

RecursiveOpenStruct などのソリューションをいくつか見つけました。

  1. ネストされたハッシュを処理しますが、それでもトップレベルの配列を処理できません
  2. 配列にネストされたハッシュはハッシュのままです。{data: [{id: 1, name: "first"}, {id: 2, name: "second"}]}ここで.data[i]は、それぞれがハッシュです。
0 投票する
1 に答える
174 参照

ruby-on-rails - 一部のデータのみへのアクセスを許可する Ruby と OpenStruct

OpenStruct データ構造の配列があります。しかし、それらにアクセスしようとすると、アクセスすることしかできませんcountry

例えば

すべての国を返しますが、もしそうなら

多くの空白行が返されます。

0 投票する
3 に答える
125 参照

ruby-on-rails - グループ化されたハッシュ内の一意のオブジェクト

.group_by文字列をキーとして、AR オブジェクトを値として、メソッドによって作成されたハッシュがあります。そして、フィールドが重複しているARオブジェクトを取り除きたい(他のフィールドは同じかもしれないし、そうでないかもしれない)

このスニペットを作成した質問を明確にするために:

grouped_hashここは:

今、結果fidとして、各キーに一意の s を持つハッシュが必要です。

私のソリューションにはいくつかのアクションが必要で、見栄えが悪いです。

最もエレガントな(おそらく1ライナー)効率的な方法(ハッシュの再作成なし)を探しています。

0 投票する
3 に答える
578 参照

ruby-on-rails - Ruby: オブジェクトのメソッドの 1 つが呼び出されているかどうかを判断できますか?

正しい質問をしているかどうかさえわかりません。問題に間違ってアプローチしている可能性がありますが、基本的には次のような状況があります。

基本的に、これらの条件をすべて満たす必要がありますが、これにどのようにアプローチすればよいかわかりません (今日 Ruby を学習したばかりです)。

内部変数にアクセスするためのドット表記に注意してください。それ以外の場合は、プロファイルをシンボルのハッシュにするだけです。だから私は2つの方法を試しましたが、そこにたどり着くだけです

方法 1:プロファイルを OpenStruct にする

これにより、ドット表記を使用して名前、年齢、性別にアクセスできるようになり、キーが存在しない場合は自動的に nil が返されますが、obj.profileはHashではなくOpenStruct型です。

方法 2:プロファイルを独自のクラスにする

これにより、それらをインスタンス変数として設定し、存在しない場合はmethod_missingを使用して nil を返すことができます。しかし、私は再びobj.profileが正しいタイプ/クラスではないという問題に遭遇しました

足りないものはありますか?おそらく区別する方法はありますか

ゲッター関数で、ハッシュまたはその他のいずれかを返しますか?

プロファイルのカスタム クラスによって返されるものを変更して、代わりにハッシュを返すことはできますか?

obj.profile の get 関数でargsと **kwargs をチェックしようとしましたが、どちらも役に立たないようです