我在Rails应用程序中有一个大型数据模型,我正在尝试将其序列化并输出到JSON。我在模型上定义了#serializable_hash
方法,并将一些属性列入黑名单。我的目标是将控制器层上的属性列入白名单以接受相同的结构,并简单地忽略我不想要“可访问”的值。
当我PUT update
使用前面提到的JSON时,有一个这样的属性给我带来了麻烦。解析请求参数时出错:
SyntaxError (/Users/brad/.rvm/gems/ruby-1.9.3-p194@project-rails32/gems/actionpack-3.2.13/lib/action_dispatch/http/request.rb:261: syntax error, unexpected tINTEGER, expecting $end
...02933", "software_date"=>"09/05/14", "software_version"=>"10...
... ^):
# stack trace...
就Rails而言,这只是一个字符串吗?为什么期待这里的输入结束?对于记录,在提交我的请求之前取消此属性会导致更新成功,因此我确信这是导致此问题的原因。
答案 0 :(得分:1)
原来我是世界上最不幸的人。
熟悉Ruby的%Q()方法,您将了解我所处的位置。
在我非常非常的特定情况下,当Rails正在为请求解析params时:
解析将失败。为什么呢?
我的Rails版本(3.2.13)在解析params
哈希的参数时使用了AwesomePrint库版本0.3.2。 The #grep method对于该版本的gem,使用以下方式评估匹配:
%Q/#{match}/
仅仅因为指定的分隔符是' /',评估失败并且解析崩溃。不要让这件事发生在你身上。