【问题标题】:Assign alias to Month names with Ruby on Rails 4使用 Ruby on Rails 4 为月份名称分配别名
【发布时间】:2016-09-28 15:55:39
【问题描述】:

在我的 Ruby on Rails 应用程序中,当用户提交表单时,我希望能够捕获创建表单的当前月份和年份。但是,对于月份,我希望能够使用一个月的别名,而不是使用实际月份名称的 Rails。比如:

  • J = 一月
  • F = 二月
  • R = 三月
  • A = 四月
  • M = 五月
  • U = 六月
  • Y = 七月
  • G = 八月
  • S = 九月
  • C = 十月
  • N = 11 月
  • D = 12 月

我找到的最接近的解决方案是使用 Rails Internationalization (I18n) API。有谁知道是否有更好或更简单的方法来做到这一点,而不是创建一种假语言来给我本地化的月份名称?

更多信息

我的目的是让 rails 将新别名记录在数据库中的 month_abbr 列下。代表月份的缩写。因此,如果我在 10 月份提交表格,则字母“C”将记录在数据库中。类似于为每条记录自动记录时间戳的方式,我只想捕获月份并记录单个字符别名。

在幕后进一步观察,我们需要月份缩写只有 1 个字符。将来这个月的缩写将被连接成一个批号。我们试图使批次代码尽可能短,这就是为什么我们不能使用内置月份缩写的原因。它们实在是太长了。

【问题讨论】:

  • 你有两个 M。
  • 不清楚。你想显示别名?还是接受它作为输入?
  • U = June? G = August? Y = July? C = October?这听起来是个糟糕的主意……
  • 为什么不使用 Rails 已经提供的 3 字母缩写(Jan、Feb、Mar、...)?
  • 这不是废话吗?当解决方案已经存在时,您为什么还要尝试发明轮子? (见@TomLord 的评论)

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord


【解决方案1】:

这似乎很容易。只需在记录创建时将月份编号映射到代码。

class Order
  MONTH_ABBRS = {
    1 => 'J',
    2 => 'F', 
    3 => 'R',
    ...
  }

  before_create :save_month_abbr

  private

  def save_month_abbr
    self.month_abbr = MONTH_ABBRS[created_at.month]
    # also you can create your order number here, or whatever
  end
end

【讨论】:

  • 我无法让它工作。当我保存记录时,它一直保存一个0。当我将self.month_abbr = MONTH_ABBRS[created_at.month]更改为self.month_abbr = created_at.month时,它在保存记录时记录一个10(这是正确的)。我在 irb 中尝试了你的代码并且工作正常,所以我不确定我做错了什么。
  • created_abbr 列的类型是什么?
  • 哇,我不敢相信我没想到! month_abbr 设置为整数,我将其更改为字符串,现在可以使用了!非常感谢@sergiotulentsev
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多