問題タブ [rails-engines]

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

ruby-on-rails - Rails3 エンジンで Haml を要求する最良の方法

Rails3 エンジン アプリケーションを開発しており、ビューに Haml を使用したいと考えています。

まず、これをエンジンの Gemfile に追加しました。

エンジンをテストしている間、問題なく動作していました ( https://github.com/josevalim/enginexを使用して gem を生成し、ダミー アプリケーションでテストしました)。

このエンジンを実際の Rails アプリケーションで使用しようとしたときに問題が発生しました。アプリケーションには独自の Gemfile に gem "haml" がないため、Haml を初期化していませんでした。そのため、.haml ビューを探していないため、テンプレートが見つからないというエラーを受け取りました。エンジンに Haml を要求することで、Rails アプリケーションからも要求されれば十分だと考えていました。

今のところ私が行ったことは、次のコードを使用してエンジンに config/initializers/haml.rb を追加することでした:

現在は機能していますが、これが本当に良い方法なのかどうか疑問に思っています。Rails が Haml の "init.rb" ファイルを呼び出さず、エンジンの Gemfile に gem "haml" を追加するだけで Haml を正しく初期化するのはなぜですか?

0 投票する
7 に答える
9984 参照

ruby-on-rails - メインアプリでのRails3エンジンのコントローラーの拡張

アプリの宝石としてRailsエンジンを使用しています。エンジンにはPostsControllerいくつかのメソッドがあり、メインアプリのコントローラーロジックを拡張したいと思います。たとえば、いくつかのメソッドを追加します。メインアプリで作成PostsControllerしただけでは、エンジンのコントローラーが読み込まれません。

問題の解決策が提案されています変更に基づいて機能を拡張するRailsエンジンActiveSupport::Dependencies#require_or_load

これを行う唯一の/正しい方法ですか?はいの場合、そのコードはどこに配置しますか?

編集1:

これは、Andrius forRails2.xによって提案されたコードです。

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

ruby-on-rails - Rails3アプリですべてのエンジンのリストを取得する方法

Rails 2.xの機能を拡張するRailsエンジンによると、

このコードはRails3では機能しません

このようなエンジンのリストを取得するには、Rails 3で何をする必要がありますか?

これは、メインアプリでRails3エンジンのコントローラーを拡張するために必要です

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

ruby-on-rails - Haml in Rails Engine

I am developing Rails engine that uses HAML for views templates. So my gemspec has following: line

But when I use this gem in an application that does not use HAMl itself, HAML does not seem to be initialized (though Gemfile.lock clearly states that it is in dependencies).

Should I add some HAML initialization in the engine code ?

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

ruby-on-rails - 親アプリからRails3エンジンクラスを再度開く

/app現在のところ、親アプリのディレクトリに同じクラスを追加するだけでは、エンジンのディレクトリに含まれているエンジンクラスを再度開くことはできません/app。例えば:

親アプリに同じ名前のファイルがある場合、からのファイルmy_engineは読み込まれません。詳細はこちら:

http://www.cowboycoded.com/2011/02/28/why-you-cant-reopen-rails-3-engine-classes-from-the-parent-app/

親アプリと同じパスに同じファイル名/クラスをドロップし、クラスを上書きする代わりに再度開くことができる回避策を探しています。多分私は明白な何かを逃しています。class_evalを使用する別のファイル(別のファイル名)でこれを機能させることはできますが、その解決策にはあまり満足していません。このためのエレガントなソリューションに関するアイデアはありますか?

また、この制限の背後に理由があるのか​​、それともrailsがファイルをロードする方法(含まれているリンクを参照)の結果であり、意図的なものではないのか疑問に思っています。この方法でクラスを再開できるようにエンジンの負荷動作を変更することは、Railsの優れた機能であるように思われます。最初は混乱していたことはわかっていますが、他の開発者もこの問題に苦労することでしょう。

0 投票する
7 に答える
24914 参照

ruby-on-rails-3 - Rails エンジン - Gem の依存関係、それらをアプリケーションにロードする方法は?

ここでエンジンを実行しています。スタンドアロンでも問題なく動作します。

それを gem に変換して別のアプリケーション内にロードすると、エンジン gem の依存関係から多くの未定義エラーが発生します。

ここにgemspecがあります:

アプリケーションでバンドル インストールを実行すると、これらすべての依存関係が一覧表示されますが、アプリケーションを実行すると、未定義のメソッド エラーが多数発生します (例: paperclip の has_attachment)。アプリケーションがエンジンの依存関係をロードしていないようです。これはデフォルトの動作ですか? 変更できますか?エンジン内のプラグインでも同じことが起こりました。

それらの宝石をアプリケーションのGemfileに手動で挿入すると、すべてが機能します...

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

ruby-on-rails - Railsエンジンがキャッシュしない

開発中は、クラス内にメソッドを含めてアプリ内のすべてのモデルを収集しActiveRecord::Base、モデルを構成できるようにします。これにより、そのモデルをグローバル配列に追加するためのフックが得られます。

EngineName::Modelsのクラスは、すべてのモデルを保持する単なるラッパーです。

ただし、更新するたびconfig_blockに、モデル内のメソッドが呼び出され、モデルのグローバル配列内に同じモデルが何度も追加されます。

以下に示すように、すべてのモデルをループするたびに、それ自体が追加され続けます。

ここに画像の説明を入力してください

エンジン内に特定のクラスをキャッシュする方法はありますか?または、モデル自体のフックにモデルを登録するという私のアプローチに欠陥がありますか?

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

ruby-on-rails-3 - Rails::Engine 名前空間コントローラーとモデル

次のチュートリアルに従いました: http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/

そして、それはすべてうまく機能します。を使用してコントローラーの名前空間を指定しました

チュートリアルでは、彼はモデルに名前空間を付けませんでした。ただし、ホスト アプリと衝突しないように、モデルに名前を付けたいと考えています。だから私は次のことを試しました:

これは私の見解であり、単純な form_for は accounts_path に移動する必要があります

しかし、名前空間モデルを使用すると、次のエラーが発生します。

new メソッド (@account = Account.new) によって作成されたオブジェクトは、次のようになります。

ルート ファイル: (これは、モデルに名前を付けない場合に機能します。)

したがって、これはルーティングの問題です。名前空間を使用しないとモデルはすべて正常に動作しますが、名前空間を使用すると動作しません。次に、次のことを試しました。

これで、ルーティング エラーなしでフォームを取得できます。しかし、フォームを送信しようとすると、オブジェクトが保存されません。

@account = Account.new(params[:account]) を実行していることを知っています。それを Account.new(params[:authr_account] に変更すると動作するはずですが、params[:account] を使用したいコントローラーも名前空間化されているため...

次に、isolated_nameスペースについて何かを見つけたので、これを試しました:

そして、ルートを次のように変更しました:

しかし、これにより次のエラーが発生します。

私はすべてを試し、他のgemを調べましたが、それらには名前空間付きのモデルがあります。モデルがホスト アプリケーションと競合しないようにするためだけに、モデルに名前を付ける必要があると確信しています。restfullroutes を使用したいのですが、この問題を解決する方法がわかりません。

私は使っている:

アドバイス/助けてくれてありがとう

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

ruby-on-rails - Rails 3 エンジン: ルートの優先度を変更する方法

アプリの 1 つの機能の一部をエンジンに抽出する作業を行っています。アプリのルートが生成されてから、エンジンのルートが生成されるようです。最終的な結果として、エンジン ルートは優先度が低いと見なされ、エンジン ルートに到達する前にアプリ ルートがすべてのリクエストを使い果たしてしまいます。エンジン ルートの優先順位を制御する方法はありますか?

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

ruby-on-rails - Rails 3 エンジンのコントローラーは、1 秒おきにページを更新するたびに Rails によってのみ検出されます。それ以外の場合は、LoadError が返されます。

Rails 3エンジンを開発していますが、コントローラーを毎回ロードするのに本当に苦労しています。

取得したページにアクセスするたびに。Webedit/public ファイルの LoadErrorController#index

再現する(bash、ruby 1.9.2、およびrails 3を想定);

次に、http://localhost:3000/public に移動します

「こんにちは」と表示されるか、エラーが表示されます。リフレッシュして、反対の動作に変化することを確認してください。

どんな助けでも大歓迎です..私はルビーデバッガーでしばらく過ごしましたが、意味のある結果を得るためにレールがどのように機能するかについて多くを理解する必要があります.