問題タブ [alias-method-chain]

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 に答える
362 参照

ruby-on-rails - Rails コア mixin メソッドをオーバーライドし、古いメソッドを呼び出すことができる

わかりにくいタイトルです。最初に私の問題を説明します。

このpolymorphic_urlメソッドは Rails 2.2.1 で変更され、私が必要とするいくつかの追加機能が含まれるようになりました。ただし、アプリケーションを古いバージョンの Rails でも動作させたいので、古いバージョンの Rails が実行されている場合に 2.2.1 の動作にパッチを適用したいと考えました。

alias_method_chain救助に?私はそれを働かせることができません。

今、私は最初にこれをヘルパーに入れようとしました-それまでに定義されてalias_method_chainいないため失敗します。polymorphic_urlそのため、同じコードをコントローラーに移動しましたが、エラーにはなりませんが、無視されます。次に、プラグインを使用して ApplicationController::Base にパッチを適用しようとしましたpolymorphic_urlが、まだ定義されていません。

polymorphic_urlモジュール ActionController::PolymorphicRoutes で定義されています。コントローラー/ビューにいつ/どこで混合されるかはよくわかりません。

このメソッドを希望の方法でラップするにはどうすればよいですか?

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

ruby-on-rails - Rails - 「attribute=」メソッドを使用した alias_method_chain

モジュールが含まれている場合、モジュールを介してモデルのメソッドにコードを「追加」したいと思います。alias_method_chain を使用する必要があると思いますが、「エイリアス メソッド」は「=」記号で終わるメソッドの 1 つであるため、使用方法がわかりません。

したがって、これが私のモジュールの現在の外観です。

関数定義でエラーが発生します。これをどのように回避しますか?

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

ruby-on-rails - alias_attributeと、元の属性名を使用したcreated and methodにより、ループが発生します

モデルの1つの属性にメソッドチェーンを動的に作成しようとしています。今では私はこの機能を持っています:

そのため、属性名の文字列を受け取り、' _without_filter 'のエイリアスを作成し(クラスの作成時に属性が存在しないため、alias_methodまたはalias_method_chainはここで失敗します)、属性名を使用して新しいメソッドを作成し、コンテンツ。

しかし、どういうわけか、「#{attribute_name} _without_filter」を呼び出すと、新しいメソッドが呼び出され(alias_attributeが何らかの理由であると思います)、プログラムはスタックループに入ります。

その属性の名前を変更しようとしているので、メソッドにその名前を使用できます...

誰かがこれについて私に教えてくれませんか。

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

ruby-on-rails - 自分自身を呼び出すRubyのエイリアスメソッドチェーン

コントローラーのrenderメソッドを書き直していますが、render_to_stringメソッドでは古いメソッドを使いたいです。これらは私の現在のコードです:

render_to_string は render を使用するため (おそらく)、無限ループに陥ります。新しいレンダー メソッドの行だけを古いメソッドに戻すにはどうすればよいですか?

受け入れられた回答からコードを微調整しました。最終的なコードは次のとおりです。

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

ruby-on-rails - Rails 3 フォームビルダーの変更方法

オーバーライドする最良の方法は何form_forですか?

たとえばform_for(@post)

<form>id 属性を自動的に に設定したいのですが@post.object_id

次のフィールドを追加します。hidden_field_tag :form_id, @post.object_id

を使用してこれを行うことはできますalias_method_chainか?

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

ruby-on-rails - HABTM属性のセッターのalias_method_chainが機能していません

だから私は投稿とトピックの両方にHABTMを持っています。投稿HABTMトピック、およびトピックHABTM投稿。私がする必要があるのは、呼び出しと組み合わせていくつかのメソッドを呼び出すことですpost.topics=()

これは私がPost.rbでやってみたことです:

しかし、これは今壊れていますpost.topics=()

エラーなどは発生しませんが、topics()で変更した後も古い値のままになりますtopics=()

でエラーを発生させたtopics_with_extra_stuff=場合、トレースはでエラーが発生したことを示しtopics=ているので、そこに入っていることがわかります。私もそれextra_stuff()が呼ばれたことを知っています。

出力の例を次に示します。

まだ2つのトピックがあるべきではなく、1つだけです。

洞察をありがとう。

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

ruby - メソッドのチェーンの途中を省略するにはどうすればよいですか?

メソッドを持つクラスと、saveエイリアシングを使用してそれを変更する3つのミックスインがあるとします。

同様に、save_with_transactionsave_with_timestampsがこの順序で混在しているため、 がMyModel#save呼び出さsave_with_timestampsれ、 が呼び出されsave_with_transaction、 が呼び出さsave_with_callbacksれ、 最終的に元の が呼び出されますsave

ここで、トランザクションなしで保存したいとします。を呼び出すことはできますsave_without_transactionが、タイムスタンプを設定するコードは呼び出されません。

タイムスタンプとコールバックを使用してモデルを保存し、トランザクションを保存するにはどうすればよいですか?

ミックスインを並べ替えることができますが、私の質問は、特にトランザクションではなく、真ん中を省略することです。メソッドのチェーンの途中を省略するにはどうすればよいですか?

注 - 簡潔にするために RoR の alias_method_chain を使用しましたが、私の質問はルビー全般に適用されます

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

ruby - class << self、alias_method、およびモンキー パッチ Mechanize::Cookie

Mechanize::Cookie の誤動作に問題があり、モンキー パッチを適用したいと考えています。私のコード:

これを追加すると、Cookie が追加されず、その理由がわかりません。

編集: 問題を確認するには、モンキー パッチの有無にかかわらず、次のコードを試してください。

パッチを適用しないと、完全な Cookie jar が表示され、空の jar が表示されます。

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

ruby-on-rails - alias_method、alias_method_chain、およびself.included

少しわかりづらいalias_method/ alias_method_chain。私は次のコードを持っています:

form_forこれは、私が望んでいることを正確に実行します。呼び出しの先頭に「チェリーを上に」を追加します。

しかし、私の理解では、これはいくつかの理由で適切なコードではありません。まず、他のオーバーライドにチェーンされないform_for(?)ため、「さらに別のチェリーを上に」追加する2番目のform_forメソッドを作成した場合、表示されません。そして第二に、そして、alias_methodちょっとalias_method_chain時代遅れの解決策であり、self.included代わりにモジュールを使用して送信する必要があります。

self.includedしかし、このメソッドを呼び出すことはできませんform_for。親メソッドを呼び出し続けるだけです。これが私が試していることです:

私の上記の解決策は機能しますが、それが間違ったやり方であるのではないかと疑っています。ルビーのベテランがこれを行うためのよりエレガントな方法を教えてくれるなら-そして/または2番目の解決策が呼ばれていない理由-私は感謝するでしょう。

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

ruby-on-rails - メソッドが定義されていないエイリアス メソッド チェーン

Rails Observer 内に含まれるモジュールがあります。

目的は次のとおりです。

  • 呼び出してafter_saveafter_updateという名前のメソッドcheck_integrity
  • Observer で定義されている場合は、 or/andcheck_integrityの最後で呼び出します。after_saveafter_update

つまり、常に呼び出す必要がありますcheck_integrity

次のコードのようなものを試しました。

しかし、それはエラーを発生させます:activesupport-3.0.17/lib/active_support/core_ext/module/aliasing.rb:31:in alias_method': undefined method after_update' for class TaskObserver' (NameError)

誰かが私がやりたいことをする方法を知っていますか?

ありがとう!