Ruby on rails rails中的influct.acronym语句可以是动态的。i、 e.基于表格,而不是代码中的硬连线?

Ruby on rails rails中的influct.acronym语句可以是动态的。i、 e.基于表格,而不是代码中的硬连线?,ruby-on-rails,Ruby On Rails,我有一种情况,我是标题类别。我需要在所有大写字母中使用缩写词,如HR和ISO 我目前正在使用拐点初始值设定项进行此操作 ActiveSupport::Inflector.inflections(:en) do |inflect| inflect.acronym 'HR' inflect.acronym 'ISO' end 然而,据我所知,异常需要硬连接到代码中。有没有办法让初始值设定项读取表格?这样,用户可以动态添加首字母缩写词异常。初始值设定项仍将仅在应用程序重新启动时运行,

我有一种情况,我是标题类别。我需要在所有大写字母中使用缩写词,如HR和ISO

我目前正在使用拐点初始值设定项进行此操作

 ActiveSupport::Inflector.inflections(:en) do |inflect|
   inflect.acronym 'HR'
   inflect.acronym 'ISO'
 end

然而,据我所知,异常需要硬连接到代码中。有没有办法让初始值设定项读取表格?这样,用户可以动态添加首字母缩写词异常。

初始值设定项仍将仅在应用程序重新启动时运行,因此向“动态”表中添加记录不会自动添加到您的屈折变化

但是你可以试试

class MyInflection < ActiveRecord::Base
  after_save :add_inflection

  def add_inflection
    ActiveSupport::Inflector.inflections(:en) {|i| i.acronym my_acronym }
  end
end

定义的测试?
是为了防止表尚未定义(新数据库,或尚未迁移)时出错。

如果我有一个普通的Ruby对象,如下所示:

  class MyInflector
    class << self
      def new_inflection(i)
        ActiveSupport::Inflector.inflections(:en) do |inflect|
          inflect.acronym i
        end
      end
    end
  end
类mydefinctor
类MyInflector
irb(主):002:1>等级定义新的_拐点(i)
irb(main):004:3>ActiveSupport::拐点。拐点(:en)不做拐点|
irb(主要):005:4*屈折。首字母缩略词i
irb(主):006:4>结束
irb(主):007:3>结束
irb(主):008:2>结束
irb(主):009:1>结束
=>:新的_拐点
irb(主要):010:0>“hr”。标题
=>“人力资源”
irb(主要):011:0>我的拐点。新的拐点(“HR”)
=>/小时/
irb(主要):012:0>“hr”。标题化
=>“人力资源”
这样,您就可以创建一个视图,让用户定义新的屈折变化。我想象,在与上述视图相关联的控制器中,您将负责新拐点的持久性和加载,如上所述

在以后重新启动时,可以按照SteveTurczyn加载持久化的屈折变化。但是,我相信这允许您定义拐点,而无需重新启动

我想这就是你的想法

更新:

在更仔细地阅读SteveTurczyn的文章时,我没有做任何与他不同的事情。他以不同的方式组织,我的眼睛错过了ActiveSupport::拐点调用。因此,如果其中任何一个符合你的需要,请接受他的回答。向史蒂夫道歉


另一个非常小且纯粹的风格差异(这可能是显而易见的)。最近,我一直试图将所有非持久性逻辑排除在AR模型之外。这就是为什么我采用波罗的海方法。我也一直在努力保持我的控制器超瘦。所以,事实上,我可能会有另一个PORO,它位于控制器MyInflector和Steve的MyInflection之间。这对于你的情况来说可能是太多的开销了,但我发现你的问题很有趣,所以我想我会加上这个

也许这有助于史蒂夫-谢谢你的回复。考虑到这个项目的范围和可能添加的新首字母缩略词的数量,我可能会坚持手动方式,特别是因为服务器必须重新启动才能使更改生效。正如我回答Steve的那样,考虑到项目的范围以及重新启动服务器以使更改生效的需要,我可能会继续使用手动更改!嘿,为了清楚起见,FWIW不需要重新启动服务器(这是我在回答顶部的IRB会话中演示的)。当我第一次读到史蒂夫的答案时,我想他是说在任何情况下都需要重启。但是,他不是这么说的。这是“但是你可以试试……”部分,他展示了如何在不重启服务器的情况下完成这项工作。不管怎样,祝你好运!
  class MyInflector
    class << self
      def new_inflection(i)
        ActiveSupport::Inflector.inflections(:en) do |inflect|
          inflect.acronym i
        end
      end
    end
  end
  irb(main):001:0> class MyInflector
  irb(main):002:1>   class << self
  irb(main):003:2>     def new_inflection(i)
  irb(main):004:3>       ActiveSupport::Inflector.inflections(:en) do |inflect|
  irb(main):005:4*         inflect.acronym i
  irb(main):006:4>       end
  irb(main):007:3>     end
  irb(main):008:2>   end
  irb(main):009:1> end
  => :new_inflection

  irb(main):010:0> "hr".titleize
  => "Hr"

  irb(main):011:0> MyInflector.new_inflection("HR")
  => /HR/

  irb(main):012:0> "hr".titleize
  => "HR"