1

iPhone アプリのバックエンド用に Rails サーバーを構築しています。Rails は JSON をフロントエンドに送信し、私はこのようなことをしています。

@user = User.find(1)

@user["status"] = "Some cool status"

render :json => @user.to_json

私のrspecテストでは、

DEPRECATION WARNING: You're trying to create an attribute `status'. Writing arbitrary attributes on a model is deprecated. Please just use `attr_writer` etc.

iPhone に送信されるオブジェクトにキー値を書き込むのと同じくらい簡単な場合、適切な代替手段を見つけるのは難しいと思います。

私の質問は、非推奨に加えて、私がやろうとしていることの実行可能な代替手段と、私のコードで特に「間違っている」ことは何ですか。

4

1 に答える 1

1

オブジェクトをハッシュに変換してUserから、追加のキーをそれに組み合わせることができます。

class User
    def to_hash
        hash = {}
        instance_variables.each {|var| hash[var.to_s.delete("@")] = instance_variable_get(var) }
        hash
    end
end

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

user = User.find(1)

user = user.to_hash

user[:status] = "Some cool status"

render :json => user.to_json

PS。@userとにかくjsonをレンダリングするときにインスタンス変数を使用する必要はありません。ローカルuser変数で十分です。

于 2013-04-23T20:58:55.803 に答える