Ruby on Rails 实现年份与循环字母编码匹配的方法咨询
Ruby on Rails 年份转字母编码实现方案
核心逻辑
预设规则为2021年对应编码M、2022年对应N,字母到Z后自动从A循环,计算逻辑如下:
- 设定基准年2021,基准字母
M,先计算基准字母相对于A的偏移量(A为0、B为1...Z为25) - 计算目标年份与基准年的差值
- 偏移量叠加年份差值后对26取模,最终转换为对应大写字母
代码实现
1. 通用计算方法
def year_to_letter(year) # 基础配置可按需调整 base_year = 2021 base_letter = 'M' base_offset = base_letter.ord - 'A'.ord year_diff = year - base_year total_offset = (base_offset + year_diff) % 26 ('A'.ord + total_offset).chr end
2. Rails 环境下的常用封装方式
- 全局工具类封装:多处使用时可在
lib目录下新建工具类,全局调用
调用方式:# lib/year_code_calculator.rb class YearCodeCalculator def self.convert(year) base_year = 2021 base_letter = 'M' base_offset = base_letter.ord - 'A'.ord year_diff = year - base_year total_offset = (base_offset + year_diff) % 26 ('A'.ord + total_offset).chr end endYearCodeCalculator.convert(2035)返回值为"A" - 模型方法封装:仅在单一模型内使用时,可直接定义为模型的类方法/实例方法,或放入对应模型的Concern中
- 视图Helper封装:仅用于前端展示时,可放入
app/helpers/application_helper.rb,直接在ERB等模板中调用
3. 验证测试用例
year_to_letter(2021) # => "M" 基准值校验 year_to_letter(2022) # => "N" 相邻年份校验 year_to_letter(2034) # => "Z" 末尾字母边界校验 year_to_letter(2035) # => "A" 循环逻辑校验 year_to_letter(2020) # => "L" 早于基准年场景校验 year_to_letter(2009) # => "A" 早于基准年的循环场景校验
内容的提问来源于stack exchange,提问作者greyoxide
相关产品推荐
相关产品推荐

