【问题标题】:I need some help manipulating a string in Ruby我需要一些帮助来处理 Ruby 中的字符串
【发布时间】:2017-05-06 10:50:25
【问题描述】:

我有这个字符串'custom_controller'。

我需要把它放到这个“CustomController”。

来自需要的文件名,需要里面的类名。

言归正传,代码是here

这是一个来自 Github 上的 Rack 教程的项目。 rack/rack/wiki/Tutorials

但是,我希望它更像是一个 Rails 应用程序,而不是仅仅将它们命名为 custom.rb 和类 Custom,而不需要 Rails 或 Rails 附带的任何 gem,除了 Rack。 这不是 Rails 应用程序。这甚至不是 Sinatra 或 Padrino 应用程序。它只是一个使用 Rack 的自制网络框架。

【问题讨论】:

  • 声明“我想让它更像 Rails 那样工作”。推断您想要一个行为类似于 Rails 但不需要 Rails 的解决方案。值得在您的问题中明确说明您想要一个不需要 Rails 的解决方案,因为已经给出了许多答案,但都忽略了这一点。
  • 是的,感谢您删除 Rails 标记。我的错。虽然有一些很好的答案。谢谢大家。请查看链接中的应用程序。你可能会喜欢它。
  • 为什么不直接使用 Rails 实现 String#camelize

标签: arrays ruby string class constants


【解决方案1】:

这也可以:

"custom_controller".gsub(/_*([a-z]+)/i) {$1.capitalize}

并且更接近Rails handles this issue的方式。我建议您查看 Rails 代码,因为它还处理您引用的简单案例的一些变体。例如,您将如何处理名称空间控制器'foo/custom_controller'

【讨论】:

    【解决方案2】:

    您可以通过执行以下操作将其作为“CustomController”:

    'custom_controller'.split('_').collect{|x| x.camelize}.join
    

    如果您想将此作为类使用,您可以执行以下操作:

    'custom_controller'.split('_').collect{|x| x.camelize}.join.constantize
    

    constantize 基本上用于将任何字符串转换为类。 但我不确定这是否适用于控制器。你可以阅读更多关于它here

    阅读更多关于 camelize here.

    【讨论】:

      【解决方案3】:

      您可以使用纯 ruby​​ 构建自己的 camelize 方法。

      def camelize(string)
        string.split('_').map(&:capitalize).join
      end
      

      【讨论】:

      • map(&:capitalize)
      • 我喜欢 split 方法,因为它返回一个数组,如果你看代码,它起源于一个数组。
      【解决方案4】:

      所需的结果只是源字符串的驼峰式表示。您可以尝试使用'custom_controller'.camelize

      【讨论】:

      • camelize 是 rails 提供的 String 方法。因此,您需要在答案中添加需要什么宝石。
      • @ArunKumar rails 在标签中被提及。所以我猜到了。
      • @31ply 如果你查看他的Gemfile,你不会找到rails。看起来他添加了错误的标签。
      最近更新 更多