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

Mat*_*Hui 2 ruby-on-rails ruby-on-rails-3

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

Zac*_*emp 6

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

def index
  # ... code here
  @partial = params[:view] || "default" # "grid", "list", etc.
end
Run Code Online (Sandbox Code Playgroud)

index.html.erb:

<%= render @partial %>
Run Code Online (Sandbox Code Playgroud)

然后,你会节省每个视图控制器的意见的文件夹部分,例如_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 
Run Code Online (Sandbox Code Playgroud)

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

render partial: @partial, locals: { ... }
Run Code Online (Sandbox Code Playgroud)