Best_in_place gem checkbox problem with Rails 4 (why is the string not converted to boolean?)

My application has the following:

# some_view_file.html.haml = best_in_place element, :inbox, :type => :checkbox # imap_accounts_controller.rb def update element = ImapAccount.find(params[:id]) element.update_attributes(params[:imap_account]) respond_with element end 

But the boolean model attribute is not updated. The error also does not occur. Any idea why my application is not converting the string "true" or "false" to a boolean value.

I did this as shown in the documentation . But it looks like Rails 4 is not so open by default to get booleans from a view / controller, for example as shown in this SO post .

The server log says:

 Started PUT "/en/imap_accounts/525188ea83c336a4eb000002" for 127.0.0.1 at 2014-01-12 16:43:22 +0100 Processing by ImapAccountsController#update as JSON Parameters: {"imap_account"=>{"enable_ssl"=>"false"}, "authenticity_token"=>"mX+Dpghb8nB49qhFTLbGSB2w3pJQg56PBgg8jR7G3/Y=", "locale"=>"da", "id"=>"525188ea83c336a4eb000002"} MOPED: 127.0.0.1:27017 QUERY database=myapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('518f599683c336fb87000003')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields=nil runtime: 0.8680ms MOPED: 127.0.0.1:27017 QUERY database=myapp_development collection=imap_accounts selector={"_id"=>BSON::ObjectId('525188ea83c336a4eb000002')} flags=[] limit=0 skip=0 batch_size=nil fields=nil runtime: 0.4400ms MOPED: 127.0.0.1:27017 QUERY database=myapp_development collection=imap_accounts selector={"_id"=>BSON::ObjectId('525188ea83c336a4eb000002')} flags=[] limit=0 skip=0 batch_size=nil fields=nil runtime: 0.6020ms MOPED: 127.0.0.1:27017 QUERY database=myapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('518f599683c336fb87000003')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields=nil runtime: 0.3010ms MOPED: 127.0.0.1:27017 QUERY database=myapp_development collection=imap_accounts selector={"_id"=>BSON::ObjectId('525188ea83c336a4eb000002')} flags=[] limit=0 skip=0 batch_size=nil fields=nil runtime: 0.5740ms Completed 204 No Content in 182ms 
+6
source share
1 answer

You can get around your current problem by doing this ...

 # imap_accounts_controller.rb def update element = ImapAccount.find(params[:id]) element.update_attributes(params[:imap_account] == "true") respond_with element end 

Or, if the params value was "1" as indicated in the best_in_place docs, it would be

 # imap_accounts_controller.rb def update element = ImapAccount.find(params[:id]) element.update_attributes(params[:imap_account] == "1") respond_with element end 

Also this gem looks as if it will work well and for this, https://github.com/prodis/wannabe_bool

0
source

All Articles