基本的にリンクを介して基本/高度なdivのオン/オフを切り替えて、ショーページで基本的な表示モードと高度な表示モードの間の切り替えを実装しようとしました。コントローラーでは、表示モードをセッション変数に保存します ( http://railscasts.com/episodes/199-mobile-devicesと同様のアプローチを使用)。問題: 表示モードを変更するとトグルは正常に機能しますが、デフォルト以外の表示モードで別のショーページへのリンクをクリックするとすぐにデフォルト モードに戻ります。これはなぜですか?
show.html.erb
<% if viewing_mode? %>
<%= link_to "Advanced", {mode: 0} %>
<% else %>
<%= link_to "Basic", {mode: 1} %>
<% end %>
<% if viewing_mode? %>
<div class="container" id="basic">
This is the basic view
</div>
<% else %>
<div class="container" id="advanced">
This is the advanced view
</div>
<% end %>
コントローラ
before_filter :prepare_for_viewing
def viewing_mode?
if session[:viewing_param]
session[:viewing_param] == "1"
else
session[:viewing_param] == "0"
end
end
helper_method :viewing_mode?
def prepare_for_viewing
session[:viewing_param] = params[:mode] if params[:mode]
end
編集 1 : セッション パラメータを表示すると、:viewing_params が次のように変更されることが示されます。
"viewing_param"=>"1"
に
"viewing_param"=>"1.json"
番組ページのリンクをクリックした後。これが問題かもしれませんが、viewing_param がこのように変更されるのはなぜですか?
編集2:ハックを追加して「a.json」を「a」に設定した後、うまくいきましたが、うまくいきませんでした:
def prepare_for_viewing
session[:viewing_param] = params[:mode][0] if params[:mode]
end