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 回答