問題タブ [method-missing]

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 投票する
2 に答える
2186 参照

ruby-on-rails - Rails:「id」プライマリキーメソッドを呼び出すと「スタックレベルが深すぎます」エラー

これは別の問題の再投稿であり、今回はより分離されています。私の environment.rb ファイルで、次の行を変更しました。

この行に:

それ以来、この呼び出し:

config.cache_classes = false の場合、開発環境で 2 回目に実行すると、「スタック レベルが深すぎます」というエラーで失敗します。config.cache_classes = true の場合、問題は発生しません。このエラーは、active_record/attribute_methods.rb の 252 行付近の次のコードの結果です。

「id」関数の呼び出しは method_missing を再呼び出しし、id が何度も呼び出されるのを防ぐものは何もないため、スタック レベルが深すぎます。

Rails 2.3.8 を使用しています。カテゴリ モデルには、サブカテゴリが多数あります。呼び出しは、上記の行のバリアント (たとえば、Category.first.subcategory_ids、"map" ではなく "each" の使用など) で失敗します。

どんな考えでも大歓迎です。

ありがとう!アミット

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

ruby-on-rails - Ruby on Railsプラグイン:acts_as_taggable_on_steroids。「method_missing」未定義のローカル変数またはメソッド'acts_as_taggble_on'を取得し続ける

Railsアプリにタグ付けシステムを実装しようとしています。私は人気のあるプラグインacts_as_taggable_on_steroidsを採用し、それをインストールする方法の指示に従いました。次に、タグを付けたいモデルにacts_as_taggableを含めましたが、サーバーを起動しようとするとmethod_missing': undefined local variable or method、#(NameError)のエラーacts_as_taggable'が発生し続けます。

私はグーグルを見て、作者はacts_as_taggable_onを試すことを提案しましたが、それでも問題は解決しませんでした。私はすでに何時間もこの問題に苦しんでいますが、それでも問題がどこにあるのかわかりません。誰かが光を当ててくれませんか?

助けてくれてありがとう!

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

ruby - 括弧を使用する場合と使用しない場合の Ruby での method_missing の呼び出しの違い

Ruby の method_missing 宣言で、指定された missing_method が括弧表記を使用して (引数なしで) 呼び出されたかどうかを確立する可能性はありますか?

またはかっこなしの表記法を使用します。

?

非常に具体的なテストの問題を解決するには、これが必要です。

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

ruby-on-rails - インスタンスがActiveRecordアソシエーションを介して定義されている場合、カスタムmethod_missingは無視されます

さまざまな状態になる可能性のある提出物があり、次のような呼び出しで状態を確認できるmethod_missingオーバーライドを作成しました。

これは素晴らしく機能します。


また、あまり良くないかもしれないさまざまな理由で、Packletbelongs_toameetingおよびbelongs_tosubmissionというモデルがあります。しかし、私はそれを見つけて驚いた

を返しますNoMethodError。一方、#draft?メソッドをにハードコーディングするSubmissionと、上記のメソッド呼び出しが機能します。


インスタンスがActiveRecordアソシエーションを介して定義されている場合でも、method_missingメソッドを認識させるにはどうすればよいですか?

0 投票する
2 に答える
384 参照

ruby - Rubyを使用してTclDSLを解析します

引数が文字列で囲まれていないTclコードを解析できるようにしたいと思います。

このtclコードを検討してください。

Tclに慣れていない場合fooは、はメソッド名でbarあり、は引数です(Tclでは引用符はオプションです)。

前のコードは次のように出力します。

rubyを使用してまったく同じ入力を解析することは可能ですか(bar引用符で囲まれていないままです)?

同等のルビーコードは次のとおりです。

もちろん、bar引用されることが期待されているので、到達すると失敗します。

私はいじくり回してみましたmethod_missing

ただし、逆の順序で解析されます。

誰かがこのタイプの問題に対するクリーンな解決策を持っていますか?メソッドを呼び出してデータを読み込むのに必要な作業は字句解析に比べて最小限であるため、文字列のトークン化は避けたいと思います。しかし、私が不可能なことをしようとしているのなら、私は知りたいのです。ありがとう。

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

ruby - method_missingを使用したRubyブロック

これは、ここでの私の質問のフォローアップであることに注意してください。

次のTclコードを解析しようとしています。

Tclでは、fooはメソッド名、barは引数、残りはで処理される「ブロック」evalです。

これが私の現在の実装です。

これは以下を出力します:

この例では、ブロックがfooメソッドに渡されるとき、それは存在しません。しかし、その中method_missingには存在します(少なくとも存在しているように見えます)。何が起きてる?

注:私はルビーの括弧の優先順位を認識しており、これが機能することを認識しています。

ただし、かっこは省略したい。それで、これはルビーで(字句解析なしで)可能ですか?

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

ruby-on-rails - Rails:関連付けを使用する場合、method_missingはモデルで呼び出されません

私の現在のコード:

これは、モデルに存在するメソッドのみを渡すレール内のこのコードが原因で発生します。

これが私が欲しいものです:

どうすればこれを達成できますか?

0 投票する
2 に答える
5490 参照

ruby - ruby で method_missing を含むモジュールを作成する方法

メソッドの欠落を拡張するモジュールがいくつかあります。

これはすべてうまく機能しObjectA.new.hello_thereます"Hello, hello_there"。同様に、ObjectB.new.goodbye_xxx出力します"Goodbye, xxx"respond_to?も機能します。たとえば、ObjectA.new.respond_to? :hello_theretrue を返します。

SaysHelloただし、 と の両方を使用する場合、これはうまく機能しませんSaysGoodbye

ObjectC.new.goodbye_aaa正しく動作しますが、ObjectC.new.hello_a奇妙な動作をします:

正しく出力され、エラーがスローされます。またrespond_to?、正しくない場合ObjectC.new.respond_to? :hello_aは false を返します。

最後に、このクラスを追加します。

怪しい行動も。ObjectD.new.lol_zzz動作しますが、ObjectD.new.hello_aand ObjectD.new.goodbye_tは両方とも、正しい文字列を出力した後に名前の例外をスローします。respond_to?hello および goodbye メソッドでも失敗します。

これをすべて正しく機能させる方法はありますか? method_missing、 モジュール 、がどのように相互作用しているかについての説明superも非常に役立ちます。

編集: coreyward が問題を解決しsuper.<method-name>(args...)ました。定義したすべてのメソッドの代わりに super を使用すると、プログラムは正しく動作します。これがなぜなのかわからないので、これについて別の質問をしましたsuper.<method-name> do in ruby​​?