我试图在显示页面上实现基本和高级查看模式之间的切换,本质上是通过链接打开/关闭基本/高级 div。在控制器中,我将查看模式存储在会话变量中(使用与http://railscasts.com/episodes/199-mobile-devices类似的方法)。问题:切换查看模式可以正常工作,但是当我在非默认查看模式中单击指向不同显示页面的链接时,它会将我带回默认模式,这是为什么呢?
显示.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:我在添加 hack 后让它工作,将“a.json”设置为“a”,这不是一个很好的解决方案,但它可以工作:
def prepare_for_viewing
session[:viewing_param] = params[:mode][0] if params[:mode]
end