ロジックを表示するかどうかを URL パラメータに大きく依存している、基本的な作業用 Rails アプリがあります。UJS と link_to remote => true を使用して ajaxify できましたが、これらのリンクをクリックすると、表示された URL が更新されず (これは理にかなっています)、他のパーシャルは URL パラメーターを読み取れません。
たとえば、index.html.erb
(UJSの前に、それがどのように機能するかを見ることができます)、
<div class="container-fluid">
<% if params[:category] %><div class="row-fluid span6">
<div class="span6">
<%= render :partial => "buglist" %>
</div>
<% end %>
<% if params[:id] %>
<div class="span6">
<%= render :partial => "bugdetails" %>
</div>
<% end %>
<% unless params[:category] or params[:id]%>
<%= render :partial => "landingpage" %>
<% end %>
</div>
私のnavbarには、このように複数の:category用のlink_toがあります
"top10", :action => "index", :category => catname) %>URL に params[:category] がある場合、左側にリストを表示し、このリストの ID をクリックすると、右側の DIV が表示されます。
パラメータがない場合は、私がランディング ページ (ある種のホームページ) と呼んでいるものをレンダリングします。
これで問題なく動作しますが、navbar リンクに remote => true を追加すると、左側の div では機能しますが、何らかの理由で URL パラメータが表示されないため、#3 (ランディング ページ) が常に表示されます。また、表示される URL は常に同じであるため、すべての link_to_unless(params...) が機能しません。
USJとは:
index.html.erb
<div class="row-fluid span6" id="buglist"></div>
<div class="row-fluid span6" id="bugdetails"></div>
<div class="row-fluid id="landingpage"></div>
index.js.erb
<% if params[:category] %>
$("#buglist").html("<%= escape_javascript(render(:partial => 'buglist')) %>");
<% end %>
<% if params[:id] %>
$("#bugdetails").html("<%= escape_javascript(render(:partial => 'bugdetails')) %>");
<% end %>
<% unless params[:category] or params[:id]%>
$("#landingpage").html("<%= escape_javascript(render(:partial => 'landingpage')) %>");
<% end %>