我正在为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的对象同样容易。
我的问题是,除了弃用之外,我正在尝试做什么以及我的代码特别“错误”的替代方案是什么。
答案 0 :(得分: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。无论如何渲染json都不需要使用实例变量@user
,本地user
变量就足够了。