具有序列化属性

时间:2015-08-27 17:14:36

标签: ruby-on-rails json serialization activemodel

我有一个带有序列化属性的用户模型。我还有一个使用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

此方法从控制台执行我想要的操作,但同样,通过序列化程序不起作用。我刚收到无效错误。

任何建议,帮助,提示或反馈都将不胜感激。

0 个答案:

没有答案