我有一个带有多个视图和布局的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
答案 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
一个可能的解决方案可能是你的控制器中的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
端