从Rails 3控制器中提取资源名称

时间:2014-01-12 16:45:38

标签: ruby-on-rails ruby ruby-on-rails-3

我有一堆资源都具有相同的路径,称为synced_index。不同资源中路由的唯一区别是它具有不同的模型名称。例如:

# Page controller
def synced_index
  render :json => Page.my_func
end

# Comment controller
def synced_index
  render :json => Comment.my_func
end

这是一个简化的示例,但我基本上想将其抽象为要继承的模块或Controller类。所以我可以简单地说:

include SyncableResource

在我的控制器类中。我的问题是确定资源名称。什么是最好/最可靠的方法?现在我有:

self.class.to_s.delete('Controller').singularize.constantize

虽然对我来说感觉有点笨拙。

2 个答案:

答案 0 :(得分:3)

这应该做的工作:

controller_name.classify

根据需要,您可以在其后添加.constantize

答案 1 :(得分:0)

这取决于您的应用程序的复杂程度以及您使用的类/命名空间。您可以查看与https://github.com/josevalim/inherited_resources/blob/master/lib/inherited_resources/class_methods.rb#L312

类似的内容inherited_resources