2011-11-14 14 views
0

私はいくつかのビューとレイアウトを持つレールアプリを持っています。私のレイアウトの1つはuser_adminです。ここには登録されたすべての「テナント」を表示したいサイドバーがあります。レールの部分的なサイトを表示する

私はテナント部分を含み、正常に動作するプロパティダッシュボードを持っています。私は共有部分を作成したサイドバーで働い上記のアイデアを取得し、これは私の性質で正常に動作します

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

でそれにリンクするには、私のテナント部分とダッシュボードが、私は私のサイトの別のページに移動すると私は(ライン#133前後)

undefined method `tenants' for nil:NilClass 

抽出されたソースを取得:

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

私はサイト全体のすべてのビューにこれを利用可能にすることができます方法はありますか?

助けてくれてありがとうは... T

+0

他のページで@propertyがnullであるようです。その変数を使用したい場所に設定していますか? – someoneinomaha

+0

'@ property'オブジェクトには何がありますか?静的なものであれば、代わりにヘルパーを使うことができます。 –

答えて

1

代わりの

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

あなたはとてもすべてTentantsはあなたの部分に表示されます

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

を書くことができます。そして、環境変数に束縛されていません。

+0

良い解決策ではありません - @propertyには特定のテナントしかなく、すべてではない場合があります。 – sled

+0

スレッドオープナーは明示的に書いています「登録済みのすべての「テナント」を表示したいと思います。彼はすでにこれを行うことができる部分を持っていますが、特定の動作のみで動作します。 – davidb

+0

シンプルで機能します!魅力のような作品をありがとう。私はそれを拾うべきだった。 –

0

あなたは追加することができます:あなたが使用してどこ

class ApplicationController < ActionController::Base 

    before_filter :load_property 

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

end 
0

問題は@propertyがnilであることのようですすべてのコントローラに各アクションの前に実行されるだろうApplicationControllerに、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 
:可能な解決策は以下のように@propertyを検索し、あなたのコントローラでbefore_filterかもしれない @property.tenants

を呼び出して、この部分のサイドバーのスニペット

end