2010-12-16 89 views
0

我加@sort_by屬性我控制器,並初始化它的值是這樣的:Rails:爲什麼不使用默認的應用程序佈局?

class ProductsController < ApplicationController 
    def initialize 
    @sort_by = :shop_brand 
    end 
    ... 
end 

這引起了默認應用程序佈局不被使用。

爲什麼?

將屬性添加到控制器並初始化它的正確方法是什麼?

回答

6

覆蓋構造函數可能是一個壞主意(正如你找到的)。你應該使用一個before_filter

class ProductsController < ApplicationController 

    before_filter :set_defaults 

    ... 

    private 

    def set_defaults 
    @sort_by = :shop_brand 
    end 

end 

但是,它聽起來像你想保持狀態。最簡單的是存儲在將每個用戶自動保存用戶的會話,直到他們關閉瀏覽器:

def set_defaults 
    session[:sort_by] ||= :shop_brand 
end 

另一種選擇是在URL傳遞當前sort_by值。這很難實現,因爲您需要確保每個鏈接或表單將值複製到下一個請求。然而,這樣做的好處是用戶可以使用不同的順序打開多個選項卡,任何書籤鏈接下次都可以恢復相同的順序。這是像搜索引擎一樣使用的方法。

+0

而且,如果'sort_by'永遠不會改變,它可能在類的基礎上作爲一個常量'SortBy'變得更好:) – Matchu 2010-12-16 02:13:03

+0

'sort_by'可能會改變,所以它不能是一個常量。此外,在您的代碼中,@ sort_by將在每個動作之前設置,但我只想設置默認值(':shop_brand')一次!每次調用'index'方法時,我都不想設置默認值! – 2010-12-16 02:17:42

+0

嗯,我想我可以做'@sort_by || =:shop_brand',但我想知道是否有更好的方法,每次都不會調用'set_defaults'? – 2010-12-16 02:25:40

相關問題