我一直收到以下错误:
当你没有时,你有一个零对象 期待它!你可能已经预料到了 数组的实例。发生错误 同时评估nil.size
根据当前用户,当他们导航到某个页面时,我想根据他们的网站将其限制为他们可以看到的内容。问题是站点和用户表之间没有直接关联。联系人has_one用户(用户信息存储在current_user变量中)。一个网站有很多联系人。还有一个网站有很多学生,其中学生表有一个site_id的外键。因此,学生和网站之间存在链接,因此当前用户导航到学生页面时,他们只能看到来自同一网站的学生。我可以通过在named_scope中对数字进行硬编码来仅显示current_user站点的学生。但是不同的用户将属于不同的站点,因此在登录时,与其关联的站点将发生变化。这就是问题 - 在named_scope中动态设置该值。这就是我所拥有的:
StudentsController
def index_scoper
if current_user.role_id == 8
super.site_staff_limit while current_user[:site_id]
# The problem is the user table has no site_id. There is no direct
# link between the users table and sites table. However, there is
# a link between users and contacts and then site and contacts and
# then site and students, where students table has site_id.
else
super.with_state.with_site
end
end
学生模特
named_scope :site_staff_limit, lambda {|site_id| {:conditions => {:site_id => site_id}}}
感谢您的任何建议。
表之间的关系:
用户:contact_id 联系人:主键,contactable_id,contactable_type site:主键 学生:site_id
用户模型 belongs_to:联系
联系型号 has_one:user belongs_to:contactable,:polymorphic => true,:dependent => :破坏
网站模型 has_many:contacts,:as => :接触 has_many:学生
学生模特 belongs_to:site
这成功地限制了学生的网站: StudentsController def index_scoper if current_user.role_id == 8 super.site_staff_limit 其他 super.with_state.with_site 结束 端
学生模特 named_scope:site_staff_limit,:conditions => {:site_id => 1}
问题是不同的用户将属于不同的网站,因此他们只能访问他们所属网站的学生记录。我很难让named_scope在动态上足以实现这一目标。
答案 0 :(得分:1)
您可以使用:through关系在用户和网站之间建立链接。
您提供的代码是否有效? 是否出现错误?