It\'s a pain to write codes like this all the time in jbuilder.json template:
json.extract! notification, :id, :user_id, :notice_type, :message, :resource_ty
Adding more to @uiureo 's answer
Suppose your Notification has some type of image uploaders (e.g. carrierwave,paperclip)
Then below version will not return you uploader object, so how do you get the image url?
json.merge! notification.attributes
notification.attributes
is hash conversion of object, it will return mounted uploader column value but not the url.
notification: Object {
title: "hellow world"
img: "sample.png"
}
Instead try this
json.merge! notification.as_json
This will return mounted column as another object in which you can query for url.
notification: Object {
title: "hellow world"
img: Object {
url: "https://www.example.com/sample.png"
}
}
This is how I do it
json.property do
Property.column_names.each do |name|
json.set! name, @property.try(name)
end
# has_ones:
json.contact @property.contact
end
It's easy to see what's happening, add logic to omit fields etc doing it this way.
I'm using jbuilder 1.5.0 and merge! didn't work but I found an alternative syntax:
json.(notification, *notification.attributes.keys)
In case if you want to exclude any of the attributes. Ex: created_at
and updated_at
json.merge! notification.attributes.reject{ |key, _| key.in?(['created_at', 'updated_at']) }
Maybe you can use json.merge!
.
json.merge! notification.attributes
https://github.com/rails/jbuilder/blob/master/lib/jbuilder.rb#L277
You may look at json.except!
json.except! @resource, :id, :updated_at
json.except! @resource
https://github.com/chenqingspring/jbuilder-except