【问题标题】:implementing with_scope with information from session使用会话中的信息实现 with_scope
【发布时间】:2011-10-23 14:39:42
【问题描述】:

在我的各种控制器中,在各种查找调用中,我将施加 1 个特定条件:

data_owner_id = @current_user.data_owner_id 

作为

  1. 我想干爽
  2. 我不想冒险忘记将它添加到所有控制器中的所有发现中

所以我想实现某种全局范围,其中包含来自控制器的信息。 “范围”不能在模型中使用(来自 railsdoc)

使用范围定义的范围将在定义时进行评估,而不是在使用时进行评估

并且@current_user 没有在那个时候定义。

任何人都可以就处理这个问题的 DRYest 方法提出任何想法吗?

【问题讨论】:

  • 范围可以用接受参数的 lambda 定义,就像当前用户一样。

标签: ruby-on-rails scope


【解决方案1】:

如果我正确理解你的问题,你可以这样做

在你的控制器中有一个前置过滤器

例如:

控制器

class PostsController < ApplicationController
  before_filter :owner_id


  def owner_id
    @data_owner_id = @current_user.data_owner_id
  end
end

通过这种方式,您可以确保所有控制器方法都具有变量 @data_owner_id 然后你可以有一个@nkm提到的范围

HTH

同样的

【讨论】:

    【解决方案2】:

    我们可以在这里使用模型范围,例如:如果有一个具有属性 owner_id 的 Post 模型,

    class Post < ActiveRecord::Base    
       scope :owned, :lambda{|id| where("owner_id = #{id}")}
    end
    

    在控制器中,

    Post.owned(@current_user.id)
    

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多