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