2009-06-25 50 views
1

我想爲Rails應用程序中的所有模型定義一個named_scope。試圖在所有模型上定義named_scopes和其他ActiveRecord關係

目前,我已經能夠通過編寫ActiveRecord :: Base的初始化程序並將常規方法放在那裏來接近此。 當然,在創建查詢鏈時,這並沒有提供任何真正的優勢,而且可能是完成工作的最不重要的方式。

但是,當我開始嘗試使用has_many,named_scope等... ActiveRecord方法時,它不起作用。

雖然我明白我的named_scope可能不正確,但我真的只想獲得定義named_scope的幫助。另外,我目前對任何Ruby ACL GEM都不感興趣。

在初始化/:

class ActiveRecord::Base 

    has_many(:permissions) 
    named_scope(:acl_check, lambda do |user_id, method| 
     { 
      :include => :permission, 
      :conditions => [ 
       ["permissions.user_id=?", user_id], 
       ["permissions.method=?", method], 
       ["permissions.classname=?", self.class.name] 
      ] 
     } 
    end) 

    # Conducts a permission check for the current instance. 
    def check_acl?(user_id, method) 

     # Perform the permission check by User. 
     permission_check = Permission.find_by_user_id_and_instance_id_and_classname_and_method(user_id, self.id, self.class.name, method) 
     if(permission_check) 
      # If the row exists, we generate a hit. 
      return(true) 
     end 

     # Perform the permission check by Role. 

     # Otherwise, the permissions check was a miss. 
     return(false) 

    end 

end 

回答

1

,因爲它是在類體內評估和預期外鍵是在其被評估,而不是繼承類的類has_many將可能無法正常工作。 (例如,ID = 42的博客模型可以包含許多與blog_id = 42一起存儲的評論模型,使其工作所需的密鑰基於類名稱)

如果命名範圍正確,則該範圍應起作用。

繼承的方法應該工作。

+0

是否有任何替代方法可以用於將named_scopes添加到我的應用中的所有模型中? 通常情況下,我可以使用這些方法,但是它們不能以named_scope的方式參與鏈。使用簡單的方法還有更多的查詢活動和開銷.... – 2009-06-25 18:36:52

相關問題