2

私は、分散アプリケーション、レールを備えたサーバー、およびモバイルクライアントをObjective C(iPhone)に実装しています。国際化を可能にするために、joshmhによるrailsプラグイン「globalize2」を使用します。

ただし、ActiveRecordでto_xmlまたはto_jsonを呼び出す場合、このプラグインは属性を変換しないことが判明しました。誰かが回避策/パッチを知っていますか?これを修正する方法、globalize2を変更する場所について何かアイデアはありますか?

使用:Rails 2.3.5 globalize2:2010-01-11からコミット

4

2 に答える 2

1

Globalize2(およびmodel_translations)を使用すると、モデル内の変換された属性は実際の属性ではなく、メソッドになります。したがって、to_jsonメソッドを実行するときは、Jorisが提案したように、:methodsを使用できますが、より簡単な方法で:

class Post < ActiveRecord::Base
  attr_accessible :title, :text
  translates :title, :text
end

class PostsController < ApplicationController
  def index   
    @posts = Post.all
    respond_to do |format|
        format.html
        format.json { render :json => { :posts => @posts.to_json(:only => :id, :methods => :title) }}
        format.js
    end
  end
end

ここでは、jsonレスポンスで投稿IDとタイトルのみを受け取りたいと思います。詳細については、Rails APIのto_json(シリアル化)を参照してください。

于 2010-03-28T19:37:29.853 に答える
0

このフォークはgithubで見つかりました:http://github.com/leword/globalize2 しかし、古いバージョンに基づいているようです。

私はこれを自分で探していましたが、:methodsオプションを使用して問題を解決しました:

@itemの1つの属性を変換する場合は、次を使用できます。

class Item < ActiveRecord::Base
  translates :name
  def t_name
    self.name
  end
end

そしてあなたのコントローラーで:

render :text => @item.to_xml(:methods => [ :t_name ])

APIパスが/en/api/item.xmlのようなものである場合、t_name属性で英語の翻訳を取得する必要があります

所属関係の場合:

belongs_to :category
def category_name
  self.category.name
end

そしてあなたのコントローラーで:

render :text => @item.to_xml(:methods => [ :category_name ])

ユースケースはおそらく異なります。上記は私のために働く回避策です。

于 2010-02-03T23:25:03.040 に答える