我有一个带有序列化属性的用户模型。我还有一个使用Grape构建的JSON API,使用ActiveModel :: Serializer来序列化JSON。 以下是代码的相关摘要:
class User < ActiveRecord::Base
serialize :about_me
serialize :favorites
end
class UserSerializer < ActiveModel::Serializer
attributes :id, :email, :password, :token, :about_me, :favorites
end
当我通过rails控制台与User类的实例进行交互时,一切正常。例如,我可以这样做:
2.2.1 :003 > user.about_me = {some_key: "some value", other_key: "other value"}
=> {:some_key=>"some value", :other_key=>"other value"}
2.2.1 :004 > user.save
(0.3ms) begin transaction
SQL (1.0ms) UPDATE "users" SET "about_me" = ?, "updated_at" = ? WHERE "users"."id" = ? [["about_me", "---\n:some_key: some value\n:other_key: other value\n"], ["updated_at", "2015-08-27 17:08:45.459413"], ["id", 4]]
(7.2ms) commit transaction
=> true
序列化很好,一切正常。
但是,当数据通过API通过串行器时。我明白了:
{error: "about_me is invalid"}
我甚至尝试添加api使用的包装方法而不是#update_attributes,我尝试使用自定义方法:
def update_attributes_from_params(params)
self.about_me = params[:about_me] if params[:about_me].present?
self.email = params[:email] if params[:email].present?
self.password = params[:password] if params[:password].present?
self.your_style = params[:your_style] if params[:your_style].present?
self.favorites = params[:favorites] if params[:favorites].present?
self.save
end
此方法从控制台执行我想要的操作,但同样,通过序列化程序不起作用。我刚收到无效错误。
任何建议,帮助,提示或反馈都将不胜感激。