是否有可能在rails中有条件默认范围?

时间:2016-09-07 06:51:05

标签: ruby-on-rails ruby default-scope

我在rails 3.2.21上,ruby版本是2.0

我的要求是为特定模型设置基于角色的条件默认范围。例如

将角色变量视为登录用户的属性

if role == 'xyz'
  default_scope where(is_active: false)
elsif role == 'abc'
   default_scope where(is_active: true)
end

2 个答案:

答案 0 :(得分:2)

编程中没有什么是不可能的。

一般来说,使用default_scope是一个坏主意(很多文章都写在这个主题上)。

如果您坚持使用当前用户的属性,则可以将其作为参数传递给范围:

scope :based_on_role, lambda { |role|
  if role == 'xyz'
    where(is_active: false)
  elsif role == 'abc'
    where(is_active: true)
  end
}

然后按如下方式使用它:

Model.based_on_role(current_user.role)

Sidenote:Rails 3.2.x - 认真?...

答案 1 :(得分:1)

default_scope where(
  case role
  when 'xyz' then { is_active: false }
  when 'abc' then { is_active: true }
  else '1 = 1'
  end
)

另外,请阅读Andrey Deineko的答案,特别是有关默认范围用法的部分。