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

时间:2012-10-07 21:50:15

标签: ruby-on-rails ruby-on-rails-3

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

1 个答案:

答案 0 :(得分: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: { ... }