Ruby on rails 自定义RubyonRails中呈现对象id的格式

Ruby on rails 自定义RubyonRails中呈现对象id的格式,ruby-on-rails,yaml,Ruby On Rails,Yaml,在我的应用程序中,我有一个模型用户,它和Rails应用程序中的每个模型一样,都有一个id。问题是,我如何自定义这个id,以便在视图中以非1而是#0001的格式显示它。使用yml文件有什么方法可以做到这一点吗?如果您只计划拥有少于10000个用户,您可以通过 module UsersHelper def format_id user_id "##{user_id.to_s.rjust(4, '0')}" end end 并且认为: <%= format_id user.id

在我的应用程序中,我有一个模型用户,它和Rails应用程序中的每个模型一样,都有一个id。问题是,我如何自定义这个id,以便在视图中以非1而是#0001的格式显示它。使用yml文件有什么方法可以做到这一点吗?

如果您只计划拥有少于10000个用户,您可以通过

module UsersHelper
  def format_id user_id
    "##{user_id.to_s.rjust(4, '0')}"
  end
end
并且认为:

<%= format_id user.id %>

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

答案是:

我创建了一个助手:

  def format_id customer_id
    "#{t('customer_prefix')}#{customer_id.to_s.rjust(5, '0')}"
  end
并将customer_前缀存储在en.yml中

en:
  customer_prefix: "CC"

Getter

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

#app/models/user.rb
Class User < ActiveRecord::Base
   def id
     "#{self[:id].to_s.rjust(4, '0')}" #-> from tobago's answer
   end
end
#app/models/user.rb
类用户来自多巴哥的答案
结束
结束

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

为什么需要它作为yaml文件?你能告诉我们到目前为止你在视图代码中尝试了什么吗(即使它不起作用)?我甚至不尝试这样做,因为我想问更有经验的开发人员如何做到这一点。我考虑yml文件,因为它需要有前缀才能在不更改应用程序代码的情况下进行配置。例如:“CC0001”将来可能会改为“BB0001”,但很抱歉,堆栈溢出通常不是这样工作的。我们通常希望您自己尝试过,然后我们会帮助您修复代码…我投票了,并在我的答案中使用了您的代码-希望您不要介意它会起作用,因为我没有在db中更改用户id。我只有一个在视图中显示的正确格式的id,但谢谢。@Rich Peck:因为他想在视图中使用标识符,所以将逻辑放入模型中不是一个合适的解决方案。它是表示内容,属于视图(除了HTML视图之外,没有其他类型的表示需要标识符)。如果你真的不想在视图助手中使用逻辑,我宁愿同意遵循decorator模式,并将逻辑放入decorator中。这一点是正确的——尽管它仍然是解决方案的可行替代方案,但它是否100%可行则是另一回事