問題タブ [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.
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 で定義されています。コントローラー/ビューにいつ/どこで混合されるかはよくわかりません。
このメソッドを希望の方法でラップするにはどうすればよいですか?
ruby-on-rails - Rails - 「attribute=」メソッドを使用した alias_method_chain
モジュールが含まれている場合、モジュールを介してモデルのメソッドにコードを「追加」したいと思います。alias_method_chain を使用する必要があると思いますが、「エイリアス メソッド」は「=」記号で終わるメソッドの 1 つであるため、使用方法がわかりません。
したがって、これが私のモジュールの現在の外観です。
関数定義でエラーが発生します。これをどのように回避しますか?
ruby-on-rails - alias_attributeと、元の属性名を使用したcreated and methodにより、ループが発生します
モデルの1つの属性にメソッドチェーンを動的に作成しようとしています。今では私はこの機能を持っています:
そのため、属性名の文字列を受け取り、' _without_filter 'のエイリアスを作成し(クラスの作成時に属性が存在しないため、alias_methodまたはalias_method_chainはここで失敗します)、属性名を使用して新しいメソッドを作成し、コンテンツ。
しかし、どういうわけか、「#{attribute_name} _without_filter」を呼び出すと、新しいメソッドが呼び出され(alias_attributeが何らかの理由であると思います)、プログラムはスタックループに入ります。
その属性の名前を変更しようとしているので、メソッドにその名前を使用できます...
誰かがこれについて私に教えてくれませんか。
ruby-on-rails - 自分自身を呼び出すRubyのエイリアスメソッドチェーン
コントローラーのrenderメソッドを書き直していますが、render_to_stringメソッドでは古いメソッドを使いたいです。これらは私の現在のコードです:
render_to_string は render を使用するため (おそらく)、無限ループに陥ります。新しいレンダー メソッドの行だけを古いメソッドに戻すにはどうすればよいですか?
受け入れられた回答からコードを微調整しました。最終的なコードは次のとおりです。
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
か?
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つだけです。
洞察をありがとう。
ruby - メソッドのチェーンの途中を省略するにはどうすればよいですか?
メソッドを持つクラスと、save
エイリアシングを使用してそれを変更する3つのミックスインがあるとします。
同様に、save_with_transaction
とsave_with_timestamps
がこの順序で混在しているため、 がMyModel#save
呼び出さsave_with_timestamps
れ、 が呼び出されsave_with_transaction
、 が呼び出さsave_with_callbacks
れ、 最終的に元の が呼び出されますsave
。
ここで、トランザクションなしで保存したいとします。を呼び出すことはできますsave_without_transaction
が、タイムスタンプを設定するコードは呼び出されません。
タイムスタンプとコールバックを使用してモデルを保存し、トランザクションを保存するにはどうすればよいですか?
ミックスインを並べ替えることができますが、私の質問は、特にトランザクションではなく、真ん中を省略することです。メソッドのチェーンの途中を省略するにはどうすればよいですか?
注 - 簡潔にするために RoR の alias_method_chain を使用しましたが、私の質問はルビー全般に適用されます
ruby - class << self、alias_method、およびモンキー パッチ Mechanize::Cookie
Mechanize::Cookie の誤動作に問題があり、モンキー パッチを適用したいと考えています。私のコード:
これを追加すると、Cookie が追加されず、その理由がわかりません。
編集: 問題を確認するには、モンキー パッチの有無にかかわらず、次のコードを試してください。
パッチを適用しないと、完全な Cookie jar が表示され、空の jar が表示されます。
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番目の解決策が呼ばれていない理由-私は感謝するでしょう。
ruby-on-rails - メソッドが定義されていないエイリアス メソッド チェーン
Rails Observer 内に含まれるモジュールがあります。
目的は次のとおりです。
- 呼び出して
after_save
、after_update
という名前のメソッドcheck_integrity
- Observer で定義されている場合は、 or/and
check_integrity
の最後で呼び出します。after_save
after_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)
誰かが私がやりたいことをする方法を知っていますか?
ありがとう!