Rails关联不完全可用

时间:2014-04-10 16:32:04

标签: ruby-on-rails ruby-on-rails-3

在我的一个模型(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

0 个答案:

没有答案