我在軌3.2.21,紅寶石版本是2.0是否有可能在rails中有條件的默認範圍?
我的要求是具有基於角色的條件默認範圍爲特定的模型。例如
考慮角色變量作爲登錄的用戶
if role == 'xyz'
default_scope where(is_active: false)
elsif role == 'abc'
default_scope where(is_active: true)
end
我在軌3.2.21,紅寶石版本是2.0是否有可能在rails中有條件的默認範圍?
我的要求是具有基於角色的條件默認範圍爲特定的模型。例如
考慮角色變量作爲登錄的用戶
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的答案,具體是關於默認範圍usag的部分即
我認爲它會拋出'未定義的變量或方法'角色'模型' –
再次,正如我在評論中所說對你的答案來說,靜態和動態從句有明顯的區別。這個是靜態的,它在模型的上下文中被評估過一次。 – mudasobwa
角色是類變量還是什麼? –
將角色視爲已登錄用戶的屬性 – srikant
看起來這是非常糟糕的模式。那麼像CanCan這樣的寶石呢? – Aleksey