2017-01-18 19 views
0

私は最近、エンジンを使用していくつかのアプリケーションを分割し始めました 私は共有部分のいくつかのリンクからいくつかの問題に遭遇しました。部分は次のようになります。メインアプリケーションとエンジンへの部分的なリンクの共有リンク

shared/delete_link.html.erb 

<%= link_to object, 
      method: :delete, 
      data: { confirm: 'Are you sure?' } do%> 
      <span class="glyphicon glyphicon-remove"></span> 
<% end %> 

私はこのように部分を呼び出します。

<%= render "shared/delete_link", :object => search %> 

これは、メインアプリではまだですが、今、私はこのような状況を持っているモデル/ルートのため正常に動作します:

部分がレンダリングされる
|-controller(main-app) 
|--show(main-app) 
|---partial(engine) 
|----partial-delete-link(main-app) 
|-----link-route(engine) 

私がしたいオブジェクトが削除を渡しメインアプリ内のコントローラによって、エンジン内のルートの削除リンクが表示されます。重要なのは、コントローラがメインアプリケーションにあり、オブジェクトのルートがマウントされたエンジン内にあるため、名前空間にする必要があることだけです。

多くのロジックを自分のビューに入れないで機能を復元するにはどうすればよいですか?

答えて

0

リファクタリング時に過度にしないでください。

partialを使用して1つの要素を作成することは、ほとんど最適ではありません。代わりに、あなたは簡単にデフォルト引数に充填しながら、別の方法にプロキシラッパーを作成することができます方法を用いることにより

module LinksHelper 
    def link_to_destoy(object, **kwargs) 
    opts = { 
     method: :delete, 
     data: { confirm: 'Are you sure?' } 
    }.deep_merge(kwargs) 
    link_to object, opts do 
     content_tag :span, class: 'glyphicon glyphicon-remove' 
    end 
    end 
end 

:代わりに、あなただけのヘルパーメソッドを作成することができます。比較パーツでは、htmlの大きな断片には適していますが、変数の受け渡しと合成に関しては、やはり面倒です。助けのための

# /foos/bars/:id 
<%= link_to_destoy([:foo, bar]) %> 

# /foos/:foo_id/bars/:id 
<%= link_to_destoy([foo, bar]) %> 
+0

ありがとう:あなたは配列を渡すレールでの名前空間のパスへのリンクを作成するには

。私は最終的に私はヘルパーを作るだろうと知っていましたが、配列をlink_toに渡すことはできませんでした。それは正しいパスを構築しているようですが、#<#:0x0 ... bb88>の '未定義メソッド 'foo_bar_path'にはまだエラーがあります。私がルートをぶつけると現れますか?このヘルパーのヘルパーテストをどうすればできますか? – mkrinblk

関連する問題