2011-03-06 76 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

相關問題