Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于当前\u用户动态设置命名\u范围_Ruby On Rails_Dynamic_Model_Controller_Named Scope - Fatal编程技术网

Ruby on rails 基于当前\u用户动态设置命名\u范围

Ruby on rails 基于当前\u用户动态设置命名\u范围,ruby-on-rails,dynamic,model,controller,named-scope,Ruby On Rails,Dynamic,Model,Controller,Named Scope,我不断得到以下错误: 你有一个零对象,而你没有 期待吧!你可能会想到 数组的实例。发生了错误 在评估零尺寸时 根据当前用户,当他们导航到某个页面时,我想根据他们的站点将他们的浏览范围限制在所能看到的范围内。问题是站点和用户表之间并没有直接的关联。联系人只有一个用户(用户信息存储在当前用户变量中)。一个网站有很多联系人。一个站点有很多学生,其中学生表有一个外键site\u id。因此学生和站点之间有一个链接,所以当当前用户导航到学生页面时,他们只能看到来自同一站点的学生。我可以通过在命名的\u范围

我不断得到以下错误:

你有一个零对象,而你没有 期待吧!你可能会想到 数组的实例。发生了错误 在评估零尺寸时

根据当前用户,当他们导航到某个页面时,我想根据他们的站点将他们的浏览范围限制在所能看到的范围内。问题是站点和用户表之间并没有直接的关联。联系人只有一个用户(用户信息存储在当前用户变量中)。一个网站有很多联系人。一个站点有很多学生,其中学生表有一个外键site\u id。因此学生和站点之间有一个链接,所以当当前用户导航到学生页面时,他们只能看到来自同一站点的学生。我可以通过在命名的\u范围中硬编码一个数字来实现这一点,只显示当前\u用户站点的学生。但是不同的用户将属于不同的站点,因此当登录时,与他们关联的站点将发生变化。这就是问题所在-在命名的\u范围中动态设置该值。这就是我所拥有的:

学生控制员

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}}}
谢谢你的建议

表之间的关系:

用户:联系电话号码 联系人:主键、可联系\u id、可联系\u类型 站点:主键 学生:站点id

用户模型 属于:联系人

接触模型 有一个:用户 属于:可接触,:多态=>true,:依赖=>:destroy

场地模型 有多个:联系人,:as=>:可联系 你有很多学生吗

学生模型 属于:站点

这成功地通过站点限制了学生: 学生控制员 def索引示波器 如果当前_user.role_id==8 super.site\u人员\u限制 其他的 super.with_state.with_site 结束 结束

学生模型 命名的\u范围:site\u staff\u limit,:conditions=>{:site\u id=>1}


问题是不同的用户将属于不同的站点,因此他们只能访问他们所属站点的学生记录。我很难使上面的命名范围动态到足以实现这一点。

您可能能够在用户和站点之间建立一个链接,并建立一个:通过关系

您提供的代码有效吗?
是否发生了错误?

您是否有可能将代码的格式设置得更好一些?谢谢。我已经尝试了几十种解决方案,从许多不同的错误。例如,我尝试创建三个命名的\u作用域,然后在controller:super.current\u user(:contact\u id)。contacts(:contactable\u id,:contactable\u type)。site\u staff\u limit(:site\u id)中引用它们,但这会导致无关联错误。请稍候。。。看起来您正试图使用“super”调用控制器上的作用域?是super包含学员信息。它继承自在lib目录中创建的restfulcontroller中的一个方法,学生控制器从该方法继承。所以super是指学生模型。那么您的模型是从控制器继承的吗?StudentsController是从Restful控制器继承关键字super。然后我将命名的_范围应用到super上,以限制结果。超级包含所有记录。我想通过当前用户的站点id进行限制。