Rails:允许用户使用选择在不同视图之间切换

如何允许用户使用选择菜单在相同内容的不同视图之间切换。 例如,查看http://railscasts.com/的右侧。 您可以在列表视图,表格视图和网格缩略图视图之间切换。 什么是实现这一目标的好方法?

您可以为每个视图设置一个部分,并使用session来存储首选项或只使用params

 def index # ... code here @partial = params[:view] || "default" # "grid", "list", etc. end 

index.html.erb

 <%= render @partial %> 

然后,您将每个视图部分保存在控制器的视图文件夹中,例如_grid.html.erb_list.html.erb_default.html.erb

编辑

在回答对这个(现在已有五年)答案的评论时,我正在撤销/修改我的原始建议。 将未经validation的参数传递给render并不是一个好主意,因为它有可能从文件系统中暴露任意数据。 反而建议使用白名单方法:

 def index @partial = whitelisted_partial || 'default' end def whitelisted_partial %w(grid list).detect { |str| str == params[:view] } end 

并且对评论有更直接的回应:

 render partial: @partial, locals: { ... }