基本上我想实现一个简单的Rails扩展来定义控制器中方法的严重性,以便我可以适当地限制它们的使用。比如我定义默认行为宁静作为这样的一个抽象超:Ruby on Rails模式用于设置类默认值并允许覆盖子类
view_methods :index, :show
edit_methods :new, :create, :edit, :update
destroy_methods :destroy
我然后在非抽象控制器调用了下来:
edit_methods :sort
在排序方法中添加在特定的控制器上作为编辑级别的方法。
然后,我可以使用before_filter来检查当前正在执行的操作的级别,如果我的逻辑确定当前用户无法执行操作,则中止它。
问题是,我在设置这种结构时遇到了问题。我试过这样的东西到目前为止:
class ApplicationController
@@view_methods = Array.new
@@edit_methods = Array.new
@@destroy_methods = Array.new
def self.view_methods(*view_methods)
class_variable_set(:@@view_methods, class_variable_get(:@@view_methods) << view_methods.to_a)
end
def self.edit_methods(*edit_methods)
class_variable_set(:@@edit_methods, self.class_variable_get(:@@edit_methods) << edit_methods.to_a)
end
def self.destroy_methods(*destroy_methods)
@@destroy_methods << destroy_methods.to_a
end
def self.testing
return @@edit_methods
end
view_methods :index, :show
edit_methods :new, :create, :edit, :update
destroy_methods :destroy
end
以上三种方法是有目的的不同,只是为了向你展示我试过的东西。第三个工作,但无论我测试什么控制器,都会返回相同的结果。可能是因为类变量存储在应用程序控制器中,因此全局更改。
任何帮助将不胜感激。
哇!这正是我所期待的。非常感谢你提供这些信息。我希望这也可以帮助其他人。这是一个困难的搜索,所以我很高兴你回答它:) – 2009-07-02 09:53:19