2010-09-13 113 views
0

我想在我的模型上創建一個範圍,將可用結果限制爲僅由用戶的合作伙伴擁有的結果。但是,當用戶是管理員時,我希望所有模型都可用。 這工作,但看起來很愚蠢。什麼是適當的rails3表達方式?rails3是否有可能創建一個沒有限制的model.scope

scope :accessible_by, proc { |user| 
    if user.admin? 
    where("1=1") 
    else 
    where(:owner_id => user.partner.id) 
    end 
} 

我希望能夠做的是選擇進一步做e.g

@models = MyModel. 
      accessible_by(current_user). 
      other_scope. 
      where(:property => value). 
      order("another_property desc"). 
      all 

回答

1

您可能能夠使用所有的修改。

scope :accessible_by, proc { |user| 
    if user.admin? == false 
    where(:owner_id => user.partner.id) 
    end 
} 
+0

不知道#all。謝謝! – 2010-09-13 17:52:17

+0

儘管觸發查詢,並不讓我進一步 – einarmagnus 2010-09-13 20:45:28

+1

甚至不需要所有。只是不指定其他條件。所有命名的作用域只是在ActiveRecord對象內激發一個方法。例如,如果user.admin? ==假,那麼你想要觸發where方法...否則你不需要在任何where子句上加上。 – davydotcom 2010-09-14 18:26:31

相關問題