我有一个包含两种语言内容的表格。然后我有一个名为' language'区分。现在我用I18n做多语言网站。那么,如何用当前语言获取数据库中的内容?
我认为如果我可以根据语言设置模型的default_scope,或者为不同的模型加载相同的名称。
谢谢!
答案 0 :(得分:0)
您可以使用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_scope
的{{3}}。
答案 1 :(得分:0)
如果要为同一模型有条件地切换到不同的表,可以使用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>