2012-02-14 7 views
0

このように、ページ内で生成されるすべてのリンクにデフォルトパラメータを追加するように、link_to機能を変更したいとします。link_to生成されたリンクへのアプリケーション全体のデフォルトパラメータの追加

現在の行動。

link_to "foo", "/" generates <a href="http://www.example.com/">foo</a> 

iは、アプリケーションのコントローラに指定したい(または他のどこか中央)私はのlink_toにパラメータを追加することによってそれを行うことができます知っている

link_to "foo", "/" generates <a href="http://www.example.com/?layout=foo">foo</a> 

を以下のように振る舞うのlink_toになり何か、が、私はすべての単一のlink_to呼び出しを編集することなく、アプリケーション全体の動作を変更したい。

link_toの呼び出しを受け取り、パラメータを追加して結果を返すことは可能ですか?私が使用しています

現在の回避策は、リンクのhrefにjqueryのを使用してパラメータを追加することです..しかし、非常にきれいな実際

+0

あなたはすべてのリンク上でそれを必要とするか、またはあなただけの 'paramsは必要ないですか[:レイアウト]'常にあなたのコントローラに設定するの? –

+0

私は実際には、アプリケーションの別のパスを指すページ上のすべてのリンク上に実際にそれが必要です。 –

+0

実際の問題は、特定のiframeにロードされたときに特定のレイアウトでページをレンダリングすることです。ユーザーがそのiframe内をナビゲートしている間、そのレイアウトに固執したいと思います。一方、新しいタブやウィンドウでページを開くと、通常のレイアウトが表示されます。これはなぜクッキーやセッションを使用することは不可能で、私は、特定のレイアウトが必要なときに、リンクでレイアウトパラメータを渡すという考えを持っていました。 –

答えて

1

あなたはlink_toヘルパーメソッドをオーバーライドして、あなた自身の選択のパラメータを渡すことができないthatsの。次のコードでパラメータlayout=fooを渡しました。

def link_to(text='',link='#',options={}) 
 
    link = link.include?('?') ? "#{link}&layout=foo" : "#{link}?layout=foo" 
 
    super(text,link,options) 
 
end