【发布时间】:2014-07-04 06:25:22
【问题描述】:
我正在考虑为我的联系人模型使用单表继承,以便为不同类型的联系人实现不同的行为。据我了解,Rails 通过查看 contact.rb 中类型列的值来确定要使用的 model.rb、控制器、路由等。
我打算为联系人使用单个创建表单,用户可以在其中选择选择框中的联系人类型。但是,如果我的默认应用程序语言是德语,这将如何工作?因此,用户不会选择像“客户”这样的联系人类型,而是选择“Kunde”——当然,我不想弄乱我的文件名,而是想使用 customer.rb、customers_controller.rb、customer_path 等等。
虽然我知道您可以通过在表单的选择框中使用德语名称和英语值来隐藏这个问题,但只要我想在其他任何地方显示该值,这将是一个问题,它需要是德语.
如果您的应用不是英文的,我是否缺少某些东西或 STI 不值得努力?
【问题讨论】:
-
我在非英语应用程序中从未遇到过性传播感染问题。我建议您保留英文代码,包括模型和字段名称,然后使用 I18n 框架翻译成德语。代码全是英文时更容易阅读,它使您能够充分利用 Rails 附带的约定。
-
虽然一般来说这是一个很好的建议(使用 I18n),但它并不真正适用于这种情况。您不会将模板中的单词翻译成模板中的其他单词——这是 I18n 的一个很好的用例。这个问题在方程中有或没有德语都存在。
-
@Sharagoz 当然,出于您已经提到的原因,我打算将我的代码保留为英文。但是,我认为当使用非英语用户输入来定义模型结构/关系时,我提出的问题变得很重要,因为在这种情况下,类型列的值可能是非英语术语。现在我想知道如何告诉 Rails 一种“Kunde”属于客户模型。
-
实际模型名称存储在 rails 用于跟踪 STI 的
type列中。如果模型名称是英文,那么这些值也将是英文。 -
您可以像翻译任何其他模型一样翻译 STI 模型的模型名称。如果你用 I18n 将“Customer”翻译成“Kunde”,那么调用
Customer.model_name.human将返回“Kunde”。我建议您尝试实施它,然后在实际遇到问题时提出有关 SO 的问题。这可能比您想象的要容易。
标签: ruby-on-rails activerecord ruby-on-rails-4 localization sti