首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails中的inflect.acronym语句可以是动态的吗?也就是说,基于一个表,而不是硬连接在代码中?

rails中的inflect.acronym语句可以是动态的吗?也就是说,基于一个表,而不是硬连接在代码中?
EN

Stack Overflow用户
提问于 2016-03-21 14:12:40
回答 2查看 159关注 0票数 1

我有一种情况,我是命名类别。我需要有缩写词,如人力资源和ISO在所有的大写。

目前,我正在使用以下方法在调谐器初始化器中执行此操作

代码语言:javascript
复制
 ActiveSupport::Inflector.inflections(:en) do |inflect|
   inflect.acronym 'HR'
   inflect.acronym 'ISO'
 end

然而,据我所知,异常需要硬连接到代码中。有什么方法可以让初始化器读取表吗?这样,用户就可以动态添加缩略词异常。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-21 14:31:23

初始化程序仍然只会在应用程序重新启动时运行,因此将记录添加到表“动态”不会自动添加到您的变化。

但你可以试试..。

代码语言:javascript
复制
class MyInflection < ActiveRecord::Base
  after_save :add_inflection

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

这假设您有一个模型MyInflection,表"my_inflections“具有属性"my_acronym”。

若要在重新启动时加载现有的变化,请将初始化程序设置为.

代码语言:javascript
复制
 ActiveSupport::Inflector.inflections(:en) do |inflect|
  if defined?(MyInflection)
    MyInflection.all.each { |i| inflect.acronym i.my_acronym }
  end
 end

defined?的测试是在尚未定义表(新数据库或尚未迁移)时防止错误。

票数 2
EN

Stack Overflow用户

发布于 2016-03-21 14:59:11

如果我有这样一个普通的旧Ruby对象:

代码语言:javascript
复制
  class MyInflector
    class << self
      def new_inflection(i)
        ActiveSupport::Inflector.inflections(:en) do |inflect|
          inflect.acronym i
        end
      end
    end
  end

我启动了IRB,然后我就能做到:

代码语言:javascript
复制
  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"

这样,您就可以创建一个视图,让用户定义新的变化。我想,在与上述视图相关联的控制器中,您将同时处理新的拐点的持久性和加载,如上面所示。

在以后的重新启动中,持久化的拐点可以按照SteveTurczyn加载。但是,我相信这可以让您在不需要重新启动的情况下定义拐点。

我想这就是你想要的?

更新:

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

另一个非常小和纯粹的风格差异(也许,这是显而易见的)。最近,我一直试图将所有非持久性逻辑排除在我的AR模型之外。所以我才采用PORO的方法。我也一直试图保持我的控制器超级瘦。因此,事实上,我可能会有另一个PORO,位于控制器,MyInflector,和史蒂夫的MyInflection之间。对你的情况来说,这一切可能是太多的开销,但我发现你的问题很有趣,所以我想我会解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36133336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档