【问题标题】:Customize format of presenting objects id in Ruby on Rails自定义在 Ruby on Rails 中呈现对象 id 的格式
【发布时间】:2014-08-21 06:56:34
【问题描述】:

在我的应用程序中,我有模型用户,它就像 Rails 应用程序中的每个模型一样都有一个 id。问题是如何自定义此 id 以在视图中以不是 1 而是 #0001 的格式显示它。有什么办法可以使用 yml 文件吗?

【问题讨论】:

  • 为什么需要它是yaml文件?你能告诉我们你到目前为止在视图代码中尝试了什么(即使它不起作用)?
  • 我什至不会尝试这样做,因为我想请教更有经验的开发人员如何做到这一点。我考虑 yml 文件,因为它需要具有前缀才能在不更改应用程序代码的情况下进行配置。例如:“CC0001”将来可以更改为“BB0001”
  • 您好,但很抱歉,Stack Overflow 通常不是这样工作的。我们通常希望您自己尝试过,然后我们会帮助您修复代码...

标签: ruby-on-rails yaml


【解决方案1】:

如果您只计划拥有少于 10000 个用户,您可以通过以下方式生成此类字符串

module UsersHelper
  def format_id user_id
    "##{user_id.to_s.rjust(4, '0')}"
  end
end

在视图中:

<%= format_id user.id %>

但是,当用户 id 高于 9999 时,请考虑您的想法的格式。

【讨论】:

  • 我投了赞成票,并在我的回答中使用了你的代码 - 希望你不介意
【解决方案2】:

吸气剂

这可能不起作用,因为您正在更改 primary_key(这是 ActiveRecord / 关系数据库的核心功能),但我建议为您的请求设置一个特定的 getter

#app/models/user.rb
Class User < ActiveRecord::Base
   def id
     "#{self[:id].to_s.rjust(4, '0')}" #-> from tobago's answer
   end
end

这将允许您调用 @user.id 并将 #000x 作为 id 返回,尽管实际的 id 属性仍将保留为 1

【讨论】:

  • 它将起作用,因为我没有更改数据库中的用户 ID。我只有这个 id 以正确的格式显示在视图中,但是谢谢。
  • @Rich Peck:由于他想在视图中使用标识符,因此将逻辑放入模型中不是一个合适的解决方案。它是表示的东西,属于视图(除了 HTML 视图之外,没有其他类型的表示需要标识符)。如果您真的不希望视图助手中的逻辑,我宁愿同意遵循装饰器模式并将逻辑放入装饰器中。
  • 有效点 - 它仍然是您解决方案的可行替代方案,但它是否 100% 可行是另一回事
【解决方案3】:

答案是:

我创建了一个助手:

  def format_id customer_id
    "#{t('customer_prefix')}#{customer_id.to_s.rjust(5, '0')}"
  end

并将 customer_prefix 存储在 en.yml 中

en:
  customer_prefix: "CC"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2014-07-27
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多