В самой последней версии Rails (хотя точно не могу сказать, какая именно), вы можете использовать метод as_json
:
@post = Post.first
hash = @post.as_json
puts hash.pretty_inspect
Будет выводить:
{
:name => "test",
:post_number => 20,
:active => true
}
Чтобы пойти немного дальше, вы можете переопределить этот метод, чтобы настроить способ отображения ваших атрибутов, выполнив что-то вроде этого:
class Post < ActiveRecord::Base
def as_json(*args)
{
:name => "My name is '#{self.name}'",
:post_number => "Post ##{self.post_number}",
}
end
end
Затем, с тем же экземпляром, что и выше, вы получите:
{
:name => "My name is 'test'",
:post_number => "Post #20"
}
Это, конечно, означает, что вы должны явно указать, какие атрибуты должны отображаться.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ:
Также вы можете проверить драгоценный камень Hashifiable .