6

コンボボックスを作成する JavaScript ライブラリを使用しています。人のフルネームでコンボボックスを作成する必要があるため、名前と姓を意味します。

データベースではこれらは 2 つの別個のフィールドであるため (および私のモデルでも)、モデルに追加フィールドが存在することを「シミュレート」するための (手動ですべてのハッシュ オブジェクトを作成する代わりに) 高速な方法があるかどうかを知りたいです。 JSON 変換。このオブジェクトは *full_name* をキーとして読み取ることができる JSON 配列として返される必要があるためです。

手伝ってくれてありがとう

4

3 に答える 3

11

:methodsoptions と callを渡すことで、モデルの to_json メソッドを上書きできますsuperas_jsonこれにより、スーパー クラスのバージョンがオプション付きで呼び出さ:methodsれ、モデルがfull_name属性付きでシリアル化されます。

class Person < ActiveRecord::Base
  def as_json(options={})
    options[:methods] = [:full_name]
    super
  end

  def full_name
    "#{first_name} #{last_name}"
  end
end

コントローラー内では、簡単に

render :json => @person

メソッドに渡すことができるその他のオプションを知りたい場合は、このドキュメントを確認してくださいas_jsonhttp://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html

于 2012-05-30T17:30:20.357 に答える
2

これは、この質問の複製のようです:

カスタム属性/メソッドを使用したRails 3のrespond_to json

特に :methods ハッシュ:

respond_with({
  :cars => @cars.as_json(:only => [:make, :model], :methods => [:full_name]),
  :vans => @vans
})
于 2012-05-30T17:27:35.607 に答える
-1

あなたができることは、あなたの User クラスにセッターメソッドを持つことです

def full_name=(string)
  names = string.split # the default delimiter is a space
  self.update_attributes(:first_name => names[0], :last_name => names[1])
end

フォームは:full_nameフィールドとして参照する必要があり、実際の列ではありませんが、Rails は上記のメソッドに自動的にアクセスして実行し、実際に必要な列を更新します。

于 2012-05-30T17:26:08.740 に答える