如何允许用户使用选择菜单在相同内容的不同视图之间切换。例如查看http://railscasts.com/的右侧。您可以在列表视图、表格视图和网格缩略图视图之间切换。什么是实现这一目标的好方法?
问问题
1172 次
1 回答
6
您可以为每个视图设置一个部分,并使用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
编辑
针对对此(现在已有五年历史)答案的评论,我正在撤销/修改我原来的建议。将未经验证的参数传递给 绝不是一个好主意render
,因为它有可能从您的文件系统中公开任意数据。而是推荐一种白名单方法:
def index
@partial = whitelisted_partial || 'default'
end
def whitelisted_partial
%w(grid list).detect { |str| str == params[:view] }
end
并更直接地回应评论:
render partial: @partial, locals: { ... }
于 2012-10-07T22:24:31.960 回答