如何加载 Globalize 翻译装置以测试模型?
How can I load Globalize translation fixtures to test models?
我在 Rails 4.1.12.
中使用 gobalize
gem 4.0.3
我有一个 Post
模型,我已经 运行 globalize
提供的 Post.create_translation_table!
迁移来设置 post_translations
table.
现在我想从我的夹具文件中自动加载翻译。夹具支持 label references for associations 所以我有这个:
# 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
但是 运行ning 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)
如果我执行相反的操作(即 posts.yml
中的 post_translation: my_first_translation
),也会出现类似的错误
我如何找回魔法?
解决方案
- 将
fixtures/post_translations.yml
移动到fixtures/post/translations.yml
my_first_translation
中关联的键是 globalized_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
说明
翻译模型为Post::Translation
。命名空间意味着 Post::Translation
灯具的位置必须遵循与 app/models
中的模型相同的嵌套约定。
Post::Translation
(以及任何 globalize
翻译模型)上的关联名称是 globalized_model
。 ActiveRecord::FixtureSet
uses the association name to recognise the fixture key as an association.
我在 Rails 4.1.12.
中使用gobalize
gem 4.0.3
我有一个 Post
模型,我已经 运行 globalize
提供的 Post.create_translation_table!
迁移来设置 post_translations
table.
现在我想从我的夹具文件中自动加载翻译。夹具支持 label references for associations 所以我有这个:
# 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
但是 运行ning 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)
如果我执行相反的操作(即 posts.yml
中的 post_translation: my_first_translation
),也会出现类似的错误
我如何找回魔法?
解决方案
- 将
fixtures/post_translations.yml
移动到fixtures/post/translations.yml
my_first_translation
中关联的键是globalized_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
说明
翻译模型为
Post::Translation
。命名空间意味着Post::Translation
灯具的位置必须遵循与app/models
中的模型相同的嵌套约定。Post::Translation
(以及任何globalize
翻译模型)上的关联名称是globalized_model
。ActiveRecord::FixtureSet
uses the association name to recognise the fixture key as an association.