Ruby on rails 在Rails中使用类方法创建操作

Ruby on rails 在Rails中使用类方法创建操作,ruby-on-rails,ruby,rack,Ruby On Rails,Ruby,Rack,我想用类方法在控制器内创建一个自定义操作。但这有可能吗 我想: class HellosController < ActionController::Base def self.index end end 但这并不成功 ArgumentError:缺少:路由定义上的操作键,请检查路由 我知道这不是Rails的惯例,但是如果你有一些想法,欢迎你。在控制器中以这种方式使用类方法似乎是个坏主意,或者至少是非常规的,但是你可以尝试这样的方法 class HellosController

我想用类方法在控制器内创建一个自定义操作。但这有可能吗

我想:

class HellosController < ActionController::Base
  def self.index
  end
end
但这并不成功

ArgumentError:缺少:路由定义上的操作键,请检查路由


我知道这不是Rails的惯例,但是如果你有一些想法,欢迎你。

在控制器中以这种方式使用类方法似乎是个坏主意,或者至少是非常规的,但是你可以尝试这样的方法

class HellosController < ActionController::Base
  def self.index
  end

  def index
    self.class.index
  end
end

不要说当您尝试开始使用实例变量时我没有警告您:

我不知道您为什么要这样做,但我认为类方法应该在您的模型中,您可以在controllerInteresting中调用它们。但是,如果我想像所有经典的MVC框架一样在控制器中使用此方法,我该怎么办呢?好吧,您需要通过索引操作调用self.index,以便路由按照@JaredThanks@Jared所述工作。但是,是否可以从routes.rb构建到该类方法的路由?不使用实例方法。。。。。有没有可能。。从……出发的路线。。到[a]类方法?我从来没见过这么做。好吧,我想,你可以为你的HellosController覆盖and和or,然后在那里处理你的特殊情况。但这似乎是一个过于复杂的问题解决方案,可能应该在设计级别解决。为什么必须使用类方法?因为集合的方法应该是类方法,而资源的方法应该是实例方法。因此,索引操作可以是self.get,也可以是show.get。这样就可以充分利用OO堆栈。@Zagzag。。说集合方法应该是类方法是一个有趣的想法,实际上这是模型层的一个经典想法。然而,这将是对控制器层的根本性改变。我认为rails在处理操作之前需要实例化控制器是有技术原因的。
class HellosController < ActionController::Base
  def self.index
  end

  def index
    self.class.index
  end
end