在我的一个模型(Article
)中,我有一个名为translations
的关联:
class Article < ActiveRecord::Base
...
has_many :translations
...
end
有些article
并非所有translation
都通过渲染显示。我使用pry-debugger并且可以验证对于具有两个article
的特定translations
,我只能获得一个翻译。我也尝试了以下(在模型类中使用pry-debugger):
self == Article.find(id) #true
self.translations.size # = 1
Article.find(id).translations.size # = 2
我在这里错过了什么吗?
更新
在访问关联时使用:force_reload
解决了问题。但是我怎么能避免使用它?
修改
我在哪里获取翻译
def translation_for(locale)
fallback_locale = (I18n.fallbacks[locale] & locales).first || locales.first
translations.find { |t| t.locale.to_s == locale.to_s } || translation_for(fallback_locale)
end
def locales
translations(force_reload: true).map(&:locale)
end
辅助函数main_translation
(见下文)使用默认语言环境调用上述translation_for
方法(例如:en
)
控制器的
class Profile::ArticlesController < ProfileController
def index
@articles = Article
.published
.group("articles.id")
.order(:title)
.starting_with(params[:letter])
.paginate(page: params[:page], per_page: 8)
end
...
end
视图的
%section
- if @articles.any?
- @articles.each_slice(2) do |articles|
.row
- articles.each do |article|
.article.col-xs-6
.well
:ruby
translation = article.main_translation # Helper function to get default locale
= link_to profile_article_path(@profile, article) do
.article-content
.text
.title= translation.title
%p= raw(shorten(strip_tags(translation.introduction), 50))
.clearfix