2010-12-10 22 views
0

Rails noob在這裏尋找一些建議/方向的東西。我有幾個「頁面」,我想創建這些頁面的不同視圖。 (例如 - 列表視圖(文本列表),圖庫視圖(縮略圖)等)爲頁面創建不同的視圖,我正在討論這個正確的方式嗎?

但我的方式似乎不幹,但我是新來的Rails,所以我不知道。

這是我的設置。 的routes.rb我:

resources :pages do 
    collection do 
     get :gallery 
    end 
    collection do 
     get :list 
    end  
end 

在我pages_controller.rb

def gallery 
    @pages = Page.find(:all, :order => "created_at") 
end 

def list 
    @pages = Page.find(:all, :order => "created_at") 
end 

所以已經是似乎有些奇怪,因爲我複製列表和畫廊之間的代碼。

的意見/頁/ gallery.html.erb

<% for page in @pages %> 
    <div style="width:200px;height:200px;border:1px solid #DDD;float:left;margin:10px;">  
     <%= link_to page.name, page %> 
    </div> 
<% end %> 

的意見/頁/ list.html.erb

<% for page in @pages %> 
    <div style="width:90%;border-bottom:1px solid #DDD;margin:10px;"> 
     <h3><%= link_to page.name, page %></h3> 
    </div> 
<% end %> 

一切正常。我在http://localhost:3000/pages/listhttp://localhost:3000/pages/gallery的圖庫視圖中看到列表視圖。但是有更好的方法嗎?

回答

3

首先,你可以改變你的路線代碼。不是真的有必要指定兩次採集:

resources :pages do 
    collection do 
    get :gallery 
    get :list 
    end  
end 

,並避免在控制器重複你的代碼,你可以在Page.find代碼中分離到一個新的方法,它會從一個名爲的before_filter,像這樣:

class PagesController < ApplicationController 
    before_filter :find_pages, :only => [:gallery, :list] 

    def gallery 
    end 

    def list 
    end 

private 
    def find_pages 
    @pages = Page.find(:all, :order => "created_at") 
    end 

這些是我會從改善開始的事情。這些意見對鞏固你的案例並不重要,因爲那些市長之間的分歧將會是我所假設的。

+0

非常感謝,只是我正在尋找的建議/驗證類型。謝謝! – jyoseph 2010-12-10 05:32:20

2

對於視圖文件中的數據重複,您還可以創建一個部分文件,並可以在您的兩個視圖頁面中呈現該部分文件。

可以這樣完成。

創建一個部分文件,假設_page.html.erb

<% for page in @pages %> 
    <div style="width:200px;height:200px;border:1px solid #DDD;float:left;margin:10px;">  
     <%= link_to page.name, page %> 
    </div> 
<% end %> 

,然後你可以在視圖頁面渲染這個文件

的意見/頁/ gallery.html.erb

`<%= render :partial => 'page'%> 
的意見/頁/ list.html.erb

`<%= render :partial => 'page'%> 

對於路線和控制器,我認爲@DanneManne提出了正確的方法。

希望這可能會解決您的問題。

+0

+1我欣賞好的建議! – jyoseph 2010-12-10 05:32:38

相關問題