remi / her

Her is an ORM (Object Relational Mapper) that maps REST resources to Ruby objects. It is designed to build applications that are powered by a RESTful API instead of a database.
MIT License
2.05k stars 322 forks source link

Use FirstLevelParseJSON, but the return data always contains metadata, response_errors, attributes and etc. #390

Open chandler-huang opened 8 years ago

chandler-huang commented 8 years ago

Hi sir,

When i use the latest version of her on my rails project, i follow the document to set up and use her. Now i have two questions about the return value from her.

Background: OS: Mac gem 'rails', '4.1.5' gem 'rails-api'

Example: I have an Affiliate model and initialize her like:

Her::API.setup url: 'http://localhost:3000' do |c|
  # Request
  c.use Faraday::Request::UrlEncoded

  # Response
  c.use Her::Middleware::DefaultParseJSON

  # Loger

  # Adapter
  c.use Faraday::Adapter::NetHttp
end

And in the controller, the code is

affiliate = Affiliate.find(9991104)
render json: affiliate

And get a result like this:

{
metadata: { },
response_errors: { },
destroyed: false,
attributes: {
name: "1",
affiliate_code: "1",
affiliate_url: "1",
description: "1",
is_deleted: true,
created_date: "2013-12-17T07:34:00.000+00:00",
created_by: "shuang",
modified_date: "2015-11-06T02:50:27.567+00:00",
id: 9991104
},
changed_attributes: { }
}

So how can I get the response only include attributes like

{
name: "1",
affiliate_code: "1",
affiliate_url: "1",
description: "1",
is_deleted: true,
created_date: "2013-12-17T07:34:00.000+00:00",
created_by: "shuang",
modified_date: "2015-11-06T02:50:27.567+00:00",
id: 9991104
}

And another question is when i call Affiliate.all in controller

affiliates = Affiliate.all
render json: affiliates

And the result is

{
message: "stack level too deep"
}

Dose anyone encounter the same problem like me? Thanks for all of you help.

iMacTia commented 7 years ago
# config/initializers/her.rb
Her::Model.class_eval do
  def as_json(options = nil)
  attributes.as_json(options)
  end
end
# controllers - no change here in theory
affiliate = Affiliate.find(9991104)
render json: affiliate