7

MyEngine分離された名前空間を持たないRailsエンジンがあります。ドキュメントのように、多型ヘルパーを使用してリソースへのリンクを生成しようとしています。

エンジンルート:

# config/routes.rb
...
  namespace :admin do
    resources :my_resource
  end
...

(これはエンジンであることを思い出してください)の出力例rake app:routes

    admin_my_resources GET    /admin/my_resources(.:format)          my_engine/admin/my_resources#index
                       POST   /admin/my_resources(.:format)          my_engine/admin/my_resources#create
 new_admin_my_resource GET    /admin/my_resources/new(.:format)      my_engine/admin/my_resources#new
edit_admin_my_resource GET    /admin/my_resources/:id/edit(.:format) my_engine/admin/my_resources#edit
     admin_my_resource PUT    /admin/my_resources/:id(.:format)      my_engine/admin/my_resources#update
                       DELETE /admin/my_resources/:id(.:format)      my_engine/admin/my_resources#destroy

がIDmy_resourceを持つモデルのインスタンスである場合、次のことを期待します。MyResource12345

polymorphic_url([my_engine, :admin, my_resource])

レンダリングするには:

/my_engine/admin/my_resource/12345

しかし、私は間違っていました。代わりに、例外が発生します。

undefined method `admin_my_engine_my_resource_path'...

だから、それが本当にもっと似たようなものを使うべきところpolymorphic_urlに使おうとしていますadmin_my_engine_my_resource_pathmy_engine.admin_my_resource_path(my_resource)

Rails:adminは間違った方法を追加しているようです...または私はそれを間違っていますか?

4

3 に答える 3

3

名前空間ではなくスコープを介してこれを実行しようとしましたか?

より良い説明については、このSOの記事を参照してください。Railsスコープルーティング

この良い例は、デバイスの宝石です。

幸運を!

于 2012-09-03T19:12:17.013 に答える
0

実行rake routesして、そこからurlヘルパー関数名を取得します。rake routesここでも出力を共有できます。

于 2012-08-29T06:39:48.943 に答える
0

私は最近、Rails 5でこの問題に遭遇し、次の一般的な解決策を見つけました。

YamsCoreと呼ばれる私のエンジンを考えると、通常のURLヘルパーを次の形式で生成します。

url_for(yams_core.album_tracks_path)

任意のモデルを受け入れる汎用ビューヘルパーを記述し、次の方法でURLを生成できます。

path = polymorphic_path([view.yams_core, my_resource])

アクションを指定する必要がある場合

path = polymorphic_path([view.yams_core, my_resource], action: :edit)

すなわち

path = polymorphic_path([view.engine_prefix, my_resource])
于 2019-03-07T12:17:01.377 に答える