to_formatted_s
to_formatted_s(format = :default)Extends Array#to_s to convert a collection of elements into a comma separated id list if :db argument is given as the format.
Blog.all.to_formatted_s(:db) # => "1,2,3" Blog.none.to_formatted_s(:db) # => "null" [1,2].to_formatted_s # => "[1, 2]"
2Notes
Don't Use to_formatted_s(:db) on an Array of IDs
I thought using to_formatted_s(:db) on an array of ids would separate them with commas in a nice way. Wrong. It does, but it also changes the numbers. === Wrong [60, 271, 280, 283].to_formatted_s(:db) # => "121,543,561,567" # Completely different numbers!
Instead, use the join method: === Right [60, 271, 280, 283].join(",") # => "60,271,280,283" # Much better
I think this has to do with (:db) being used for formatting dates but I'm not sure.
RE: Don't Use to_formatted_s(:db) on an Array of IDs
The reason it doesnt work @joshuapinter for IDs is because if you look at the source:
case format
when :db
if respond_to?(:empty?) && self.empty?
"null"
else
collect { |element| element.id }.join(",") # look at this line
end
else
to_default_s
end
It maps/collects the object ids and then joins them using a comma ; so in the case of 60 for instance :
60.object_id #=> 121
60.id #=> 121