4

我正在使用 Ruby on Rails (3.2.2)、globalize3 (0.2.0) 和batch_translations (0.1.2) ruby​​-gems。我想验证由 globalize3 处理的翻译数据以及它应该是的。也就是说,例如,如果...

...在我的ROOT_RAILS/app/models/article.rb文件中,我有:

class Article < ActiveRecord::Base
  translates :title, :content

  # This is needed to make the batch_translations to work.
  attr_accessible :translations_attributes
  accepts_nested_attributes_for :translations

  validates :title,
    :presence => true,
    :length   => ...
  validates :content,
    :presence => true,
    :length   => ...

  ...
end

...在我的ROOT_RAILS/app/views/articles/_form.html.erb文件中,我有:

<%= form_for(@article) do |f| %>
    English translation:
    <%= f.text_field :title %>
    <%= f.text_field :content %>

    Italiano translation:
    <%= f.globalize_fields_for :it do |g| %>
      <%= g.text_field :title %>
      <%= f.text_field :content %>
    <% end %>
<% end %>

我想在提交表单时验证数据titlecontent值,而当前I18n.locale不是I18n.default_locale. 换句话说,为了在数据库中存储正确的翻译信息,我想在用户提交非默认英语语言的语言环境的翻译数据时验证title和属性。content

可能吗?如果是这样,怎么做?

注意:我以this question为例。

4

1 回答 1

0

如果我的理解正确,有几种方法可以解决这个问题。

1) 控制器级别测试,您可以在其中测试提交的包含语言环境的表单是否保留到正确的本地化内容表。一种方法是这样的:

    it "persists localized content for the Italian locale" do
       Article.should_receive(:create).with(:locale => 'it', :title => 'title goes here', :content => 'this is content')
       post :create, :locale => 'it', :title => 'title goes here', :content => 'this is content'
    end

这基本上是说 Article 模型应该接收带有这些参数的创建消息。我对 batch_translations API 的工作方式并不完全清楚,因此您需要验证参数是否来自该样式表单。

到那时,我认为您将充分测试数据是否正确地持久化到数据库中。任何进一步的事情都将测试 Globalize gem 是否有效,这是您想要避免的。尝试并测试边界。

于 2012-08-16T20:14:21.270 回答