4

gobalize在 Rails 4.1.12 中使用 gem 4.0.3。

我有一个Post模型,我已经运行了Post.create_translation_table!提供的迁移globalize来设置一个post_translations表。

现在我想从我的夹具文件中自动加载翻译。夹具支持关联的标签引用,所以我有这个:

# spec/fixtures/posts.yml

my_first_post:
  author: dave

# spec/fixtures/post_translations.yml

my_first_post_translation:
  locale: en    
  title: My first post
  content: What a time to be alive!
  post: my_first_post

# spec/models/post_spec

require 'rails_helper'

RSpec.describe Post, type: :model do
  fixtures('post/translations', :posts, :authors)

  subject(:post) { posts(:my_first_post) }

  it "has an author" do
    expect(post.author).to eq(authors(:dave))
  end

  it "has a title" do
    binding.pry
    expect(post.title).to be_present
  end
end

但是运行 RSpec 会引发以下错误:

 Failure/Error: Unable to find matching line from backtrace
 ActiveRecord::StatementInvalid:
   SQLite3::SQLException: table post_translations has no column named post: INSERT INTO "post_translations" ("locale", "title", "content", "post", "created_at", "updated_at", "id") VALUES ('en', 'My first post', 'This is some compelling english content', 'my_first_post', '2015-08-21 10:23:27', '2015-08-21 10:23:27', 626768522)

如果我做相反的事情(即post_translation: my_first_translationin posts.yml) ,则会发生类似的错误

怎么找回魔法?

4

1 回答 1

14

解决方案

  1. 移至fixtures/post_translations.yml_fixtures/post/translations.yml
  2. 关联的关键my_first_translationglobalized_model

所以你最终会得到这个:

<!-- language: yml -->
# spec/fixtures/posts.yml

my_first_post:
  author: dave

# spec/fixtures/post/translations.yml

my_first_post_translation:
  locale: en
  title: My first post
  content: What a time to be alive!
  globalized_model: my_first_post

解释

  1. The translation model is Post::Translation. The namespacing means that the location of the Post::Translation fixtures must follow the same nesting conventions as a model in app/models.

  2. The association name on Post::Translation (and any globalize translation model) is globalized_model. ActiveRecord::FixtureSet uses the association name to recognise the fixture key as an association.

于 2015-08-21T10:37:36.870 回答