是否可以在 rails 中有条件默认范围?
is it possible to have conditional default scope in rails?
我在rails3.2.21,ruby版本是2.0
我的要求是为特定模型提供基于角色的条件默认范围。例如
将角色变量视为登录用户的属性
if role == 'xyz'
default_scope where(is_active: false)
elsif role == 'abc'
default_scope where(is_active: true)
end
编程无所不能。
一般来说,使用 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)
旁注:Rails 3.2.x - 认真的吗?...
default_scope where(
case role
when 'xyz' then { is_active: false }
when 'abc' then { is_active: true }
else '1 = 1'
end
)
此外,请阅读 Andrey Deineko 的回答,特别是关于默认范围使用的部分。
我在rails3.2.21,ruby版本是2.0
我的要求是为特定模型提供基于角色的条件默认范围。例如
将角色变量视为登录用户的属性
if role == 'xyz'
default_scope where(is_active: false)
elsif role == 'abc'
default_scope where(is_active: true)
end
编程无所不能。
一般来说,使用 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)
旁注:Rails 3.2.x - 认真的吗?...
default_scope where(
case role
when 'xyz' then { is_active: false }
when 'abc' then { is_active: true }
else '1 = 1'
end
)
此外,请阅读 Andrey Deineko 的回答,特别是关于默认范围使用的部分。