4

Ruby on Rails (3.2.2)、globalize3 (0.2.0)、およびbatch_translations (0.1.2) ruby​​-gem を使用しています。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 %>

フォームを送信するときにtitleとの値を検証したいのですが、現在のは ではありません。つまり、翻訳についても正しい情報をデータベースに保存するために、ユーザーがデフォルトの英語ではないロケール言語の翻訳データを送信したときに、検証して属性を設定したいと考えています。contentI18n.localeI18n.default_localetitlecontent

出来ますか?もしそうなら、どのように?

注:この質問から例を挙げました。

4

1 に答える 1

0

私の理解が正しければ、いくつかの方法があります。

1) コントローラ レベルのテスト。ロケールを含めて送信されたフォームが、ローカライズされた正しいコンテンツ テーブルに保持されることをテストします。これを行う 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 に答える