显示部分站点范围的轨道

时间:2011-11-14 16:22:49

标签: ruby-on-rails ruby

我有一个带有多个视图和布局的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 -->

有没有办法让整个网站的所有观点都可以使用它?

感谢您的帮助... T

3 个答案:

答案 0 :(得分:1)

而不是

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

你可以写

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

所有租户都会显示在您的部分租户中。而不是绑定到环境变量。

答案 1 :(得分:0)

您可以在ApplicationController中添加:before_filter,它将在每个控制器中的每个操作之前执行

class ApplicationController < ActionController::Base

  before_filter :load_property

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

end

答案 2 :(得分:0)

问题似乎是@property为零,只要您使用调用@property.tenants

的部分侧边栏代码段,就必须使用@property

一个可能的解决方案可能是你的控制器中的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