2011-11-14 23 views
0

我有幾個觀點和佈局一個Rails應用程序。我的一種佈局叫做user_admin。在這裏我有一個側欄,我希望顯示所有註冊的「租戶」。顯示一個導軌部分網站廣泛

我有一個性能儀表盤包含承租人部分和做工精細。爲了獲得上述想法在側欄中工作,我創建了一個共享的部分,然後鏈接到它與

<%= render :partial => "shared/sidebar_tenant_list", :locals=>{ :tenants => @property.tenants} %> 

這工作正常,在我的性能儀表盤與我的租戶部分,但是當我移動到我的網站的不同頁面我得到

undefined method `tenants' for nil:NilClass 

提取的源(左右線#133):

131: <!-- Sidebar List --> 
132:     
133: <%= render :partial => "shared/sidebar_tenant_list", :locals=>{ :tenants => @property.tenants} %> 
134:     
135: <!-- /Sidebar List --> 

有沒有一種方法,我可以做這個可以在整個網站的所有意見?

感謝您的幫助......牛逼

+0

這聽起來像@財產上的其他網頁空。你是否在你想要使用它的地方設置該變量? – someoneinomaha

+0

@屬性對象中有什麼?如果它是一種靜態的,你可以使用一個輔助,而不是 –

回答

1

而不是

<%= render :partial => "shared/sidebar_tenant_list", :locals=>{ :tenants => @property.tenants} %> 

你可以寫

<%= render :partial => "shared/sidebar_tenant_list", :locals=>{ :tenants => Tenant.all } %> 

因此,所有Tentants將顯示在您的部分。而不是綁定到一個環境變量。

+0

不是一個很好的解決方案 - @property可能只有特定的租客,而不是全部。 – sled

+0

主題首戰明確寫道:'我想要顯示所有已註冊的「租戶」 .'和他已經有部分可能做到這一點,但只有在具體行動的工作。 – davidb

+0

簡單而有效!感謝你的作品,像一個魅力。我應該接受它。 –

0

你可以添加一個:的before_filter到ApplicationController中,這將每個動作之前,在每個控制器

class ApplicationController < ActionController::Base 

    before_filter :load_property 

    def load_property 
    @property = ...Whatever... 
    end 

end 
0

這個問題似乎是@property爲零執行,無論你使用@屬性必須是可用這就要求這部分的側邊欄片斷@property.tenants

一個可能的解決方案可能是在你的控制器的before_filter中查找@property像:

class SidebarController < ApplicationController 
    before_filter :lookup_property 

    def lookup_property 
    @property = YourProperyModel.find(...) 
    end 
end 


# any controller that needs a sidebar 
class SomeControllerWithSidebar < SidebarController 
    # some sugar if it's not possible to lookup @property for a certain action 
    skip_before_filter :lookup_property, :only => [:new] 

    # any action 
    def someaction 
end 

相關問題