【问题标题】:Scoping the find method and nested assocations限定 find 方法和嵌套关联
【发布时间】:2011-08-12 11:56:30
【问题描述】:

我遇到了一个关于如何识别哪些用户拥有特定资源的问题,以便我可以防止对它们的不当访问。

我有以下嵌套关联:

用户有很多 个人资料有一个 SamplePage 有很多 主题

一旦它们嵌套得这么深,通过关联访问用户对象然后将其与当前用户进行比较就变得非常笨拙,例如:

@subject.sample_page.profile.user == current_user

我了解到限制访问的更好方法是将模型的检索范围限定为当前用户。例如:

@profile = current_user.profiles.find(params[:id])

这对我来说很有意义,但我将如何做类似的事情来找回主题?我没有找到任何使用嵌套关联的示例。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    不确定你想做什么,也不确定我能帮助你,因为我是一个大菜鸟,但我会尝试这样的事情(假设 current_user 返回一个用户):

    class Profile < ActiveRecord::Base
      has_many :subjects, :through => :sample_pages
    end
    

    在你的控制器中:

    @subject = current_user.profiles.subjects.find(params[:id])
    

    这样更方便:

    class User < ActiveRecord::Base
      def subjects
        profiles.subjects
      end
    end
    
    @subject = current_user.subjects.find(params[:id])
    

    所有这些都应该延迟加载,如下所述:http://asciicasts.com/episodes/202-active-record-queries-in-rails-3

    但是,如果这是一个频繁的操作,您可能需要重新设计一些东西,因为长的关联链意味着繁重的查询(大量的连接)。

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 2011-10-30
      • 2021-11-27
      相关资源
      最近更新 更多