根据运行时上下文限制查​​找条件

时间:2009-06-27 11:10:34

标签: ruby-on-rails activerecord scope

哇疯狂的头衔!但这是问题所在。为了干扰我的学校网站管理系统应用程序,我已经使我的应用程序模块(FileSet)变得安静并将其放在一个地方。以前,FileSet用于一般网站系统,也用于儿童学习区系统。除了一个细微差别外,它们的表现完全相同。在孩子区域,FileSet文件分为两类,启动和正常。启动文件是教师制作的文件,正常文件是孩子们制作的文件。现在在通用网站应用程序中,这种区别是不相关的,因此被忽略。这是艰难的部分。我想在两个上下文中使用相同的控制器和视图。在运行时我知道文件集属于一般站点,或属于这个学习区域,所以我可以说,如果它在学习区域上下文中,我想约束FileSet.find(x).files只使用'正常的'命名范围。如果上下文是普通网站,那么我们根本就不会使用命名范围。

我已经简化了上面的信息,但基本上问题是,如何调用FileSet.find(x).files并让files方法足够聪明以缩小基于运行时上下文返回的结果?

我已经探索了一点关联扩展,但这似乎没有完成这项工作。我希望这里存在一些东西。我正在拼命地将这个逻辑保留在模型中,而没有关注它的视图或控制器。如果在运行时评估它们,默认范围将起作用:)

期待一些建议:)

干杯,

布伦登

1 个答案:

答案 0 :(得分:2)

您是否可以使用具有proc的命名范围来确定当前上下文并返回适当的条件? 文件中的内容如下:

named_scope :for_context, :conditions => lambda { 
  if only_normal?
    { :type => 'normal' }
  elsif only_startup?
    { :type => 'normal' }
  else
    {}
  end
}

然后你可以打电话:

FileSet.find(x).files.for_context