How to extract all attributes with Rails Jbuilder?

前端 未结 6 1141
無奈伤痛
無奈伤痛 2020-12-11 00:16

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         


        
相关标签:
6条回答
  • 2020-12-11 00:36

    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.

    sample response

    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.

    sample response

    notification: Object {
       title: "hellow world"
       img: Object {
           url: "https://www.example.com/sample.png"
       }
    }
    
    0 讨论(0)
  • 2020-12-11 00:43

    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.

    0 讨论(0)
  • 2020-12-11 00:47

    I'm using jbuilder 1.5.0 and merge! didn't work but I found an alternative syntax:

    json.(notification, *notification.attributes.keys)
    
    0 讨论(0)
  • 2020-12-11 00:51

    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']) }
    
    0 讨论(0)
  • 2020-12-11 00:56

    Maybe you can use json.merge!.

    json.merge! notification.attributes
    

    https://github.com/rails/jbuilder/blob/master/lib/jbuilder.rb#L277

    0 讨论(0)
  • 2020-12-11 00:56

    You may look at json.except!

    json.except! @resource, :id, :updated_at

    json.except! @resource

    https://github.com/chenqingspring/jbuilder-except

    0 讨论(0)
提交回复
热议问题