【问题标题】:How can I load different model with different language?如何使用不同的语言加载不同的模型?
【发布时间】:2016-01-07 08:06:47
【问题描述】:

我有一个包含两种语言内容的表格。然后我有一个名为'语言'的列来区分。现在我使用I18n做多语言网站。那么,我怎样才能以当前语言获取数据库中的内容?

我想如果我可以设置模型的default_scope accoding 为语言,或者加载不同的模型同名。

谢谢!

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

您可以使用 URL 参数来设置请求的应用程序区域设置,例如:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :set_locale
 
  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end
end

按当前语言环境查找模型:

YourContent.where(name: some_name, language: I18n.locale)

并在带有字符串文件的视图中使用t 方法,因为您已设置应用程序区域设置。

docs 有其他几个例子。

是的,您可以使用default_scope { language: I18n.locale } 省略多余的where,但请注意default_scopecaveats

【讨论】:

    【解决方案2】:

    如果你想为同一个模型有条件地切换到不同的表,你可以使用ActiveRecord::Base.table_name类方法。

    例子:

    cTable4 ❯ rails c -e production
    Running via Spring preloader in process 60375
    Loading production environment (Rails 4.2.4)
    irb(main):001:0> Book.first
      Book Load (0.1ms)  SELECT  "books".* FROM "books"  ORDER BY "books"."id" ASC LIMIT 1
    => #<Book id: 1, name: "ELoquent Ruby", author: "Russ", year: "2011", created_at: "2016-01-07 08:40:47", updated_at: "2016-01-07 08:40:47">
    irb(main):002:0> Book.table_name = 'titles'
    => "titles"
    irb(main):003:0> Book.first
      Book Load (0.2ms)  SELECT  "titles".* FROM "titles"  ORDER BY "titles"."id" ASC LIMIT 1
    => #<Book id: 1, title: "Practical OOD Ruby", author: "Sandi Metz">
    irb(main):004:0>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多