通过JSON API更新Rails中的布尔字段?

时间:2012-11-13 19:34:32

标签: ruby-on-rails ruby-on-rails-3 json api boolean

我有一个包含5个布尔字段的设置表。我希望能够通过JSON创建和更新这些字段。据我所知,Rails将所有参数转换为字符串,因此布尔值总是返回true。如果我发送:

{ "settings": { "setting1":true, "setting2":false } }

然后尝试执行:Setting.new(params[:settings]),这两个设置在数据库中都为true,因为false的第二个设置的值已转换为"false",因此实际上评估为true。实际上我甚至不能这样做,因为我得到了:

NoMethodError (undefined method `stringify_keys' for #<String:0x000000213dcbd0>)

就在那条线上。来自互联网的一些建议说,将参数与"true"进行比较,然后存储。这是一个巨大的痛苦,因为那时我无法利用群众分配。我不想这样做:

@setting = Setting.new
@setting.setting1 = (params[:settings][:setting1].eql? "true")
...

对于所有5个字段,特别是因为我必须为创建,更新甚至从其他控制器执行此操作(某些控制器接受JSON以创建设置对象及其自己的属性)。

还有更好的方法吗? JSON API似乎与Rails非常标准,似乎会以更优雅的方式处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

您可以传递“0”而不是false来将字段的值设置为false。

答案 1 :(得分:0)

如何制作转换器类并将其粘贴在之前的过滤器中?

class ApplicationController < ActionController::Base
  before_filter BooleanFilter
end

class BooleanFilter
  def self.filter(controller)
    # change all relevant string params to booleans, raise an exception if something other than "true" or "false" is detected
    # eg. params[:setting][:setting1] = ( params[:setting][:setting1] == "true" ? true : false )
  end
end

可能与Rails更一致的是将更改的参数分配给新的Hash对象并将其传递给模型。