2015-11-02 158 views
1

我正在使用jquery的.ajax方法在rails api上调用ruby。 get调用的主体包含一个布尔变量。然而,这个布尔变量不断转换为导轨侧的字符串。在提出请求时我使用了正确的contentType。将json参数传递给rails api

这里是我的JavaScript调用Ajax:

   var postBody = {male: true} 
       var request = $.ajax({ 
        method: "GET", 
        url: "/biographies/getAll", 
        dataType: 'json', 
        contentType: 'application/json', 
        data: postBody 
      }); 

在Ruby on Rails的控制器端,我使用的是:

params[:male] 

然而PARAMS [:男]返回 “true” 字符串,而不是true布尔值。

根据Ruby on Rails的API:

如果“内容类型”您的请求头设置为“application/JSON”,Rails会自动将您的参数转换成params哈希表,你可以像往常一样访问。 http://guides.rubyonrails.org/action_controller_overview.html#json-parameters

有没有人有任何想法,为什么它不会转换JSON请求为boolean,但保持它作为字符串。

谢谢。

回答

2

在Rails中,参数值是总是字符串; Rails不会尝试猜测或投射类型。你必须修改你的代码逻辑来调整这个Rails行为。例如:

params[:male] == 'true' 

参见this以供参考。

+1

这是有道理的。 – user1801879

+0

这似乎是好的,但我认为json允许布尔值,所以应该有一些方法来保持布尔值 – ImranNaqvi

+0

即使原始值是布尔值,当它作为Rails参数传递时,它将成为一个字符串,并由Rails控制器和控制器端,'params [:male]'将始终是字符串。如果你知道如何将它保存为布尔值,请告诉我,我会学到一些新的东西:) –