2011-03-06 92 views
1

如何创建不同的视图模式。就像访客可以选择列表或框视图。Rails如何创建不同的视图?

+0

我寻求帮助,也http://codereview.stackexchange.com/questions/1192/how-to-manage-different-views – ecoologic 2011-03-07 20:40:32

+0

[和清洁解决方案终于到了!](http://codereview.stackexchange.com/questions/1192/how-to-manage-different-views/10319#10319) – ecoologic 2012-03-25 16:30:02

回答

1

这取决于这些视图的相似程度,我要做的是为每个视图创建部分,然后在主视图中根据属性调用正确的视图。假设你有在application_helperwhich_view在你的函数index你可以写这样的事情:

<!-- your index --> 
<%= render which_view == :box ? 'index_box' : 'Index_list' %> 

我更喜欢以前的,但如果你有一些改变,你可以去这样的事情:

<% if session[:view_type] == 'box' %> 

    <!-- box content --> 

<% else %> 

    <!-- list content --> 

<% end %> 

**编辑**

使动作:

# application_controller.rb 
    def set_view_type # TODO: refactor 
    session[:view_type] = params[:view_type] 
    redirect_to :back 
    end 

设置你的路由:

# routes.rb 
    match '/set_view_type' => 'application#set_view_type', :as => :set_view_type 

写您的形式:

<!-- _view_type_selection.html.erb --> 
    <%= form_tag set_view_type_path do %> 

    <%= radio_button_tag :view_type, :box, session[:view_type] == 'box' %> 

    <%= radio_button_tag :view_type, :list, session[:view_type] == 'list' %> 

    <%= submit_tag 'select' %> 

    <% end %> 

不是最好的做法,但它的工程!

+0

如何创建辅助方法? – 2011-03-06 19:08:27

1

我几乎同意生态学。而不是第二个解决方案,我会使用控制器中的case语句来决定应该呈现哪个模板。

如何创建辅助方法?

将其添加到<controller_name>_helper文件

+0

啊是的!这是更好的,你避免渲染渲染部分的切换器! - 也许你对如何存储价值有一个好主意,我不太喜欢它 – ecoologic 2011-03-06 23:53:02

+0

我不知道整个Rails初学者的想法,但不是存储它,我宁愿在URL中看到它。所以如果我发送一个有趣的页面链接,它看起来和我的屏幕一样,我可以在该页面上导航收件人。或者我可以直接用链接发送链接,它可以在一个布局中,而不是在另一个布局中。它也更好的书签等... 我不知道任何英语的例子,但看看这个http://tv.seznam.cz/radkovy-program和这个http://tv.seznam.cz/sloupcovy-program 。我可以发送这些链接之一,并说“看第二行/列” – Mailo 2011-03-07 00:04:59

+0

我明白你的pov,我个人不喜欢在URL中存储参数,但想到一个客人选项,它是非常有意义的 – ecoologic 2011-03-07 20:38:56