json_api_client icon indicating copy to clipboard operation
json_api_client copied to clipboard

Custom endpoint returns objects only of self class

Open babrovka opened this issue 10 years ago • 3 comments

For example, we have two models:

User ans Post

Post belongs_to :user User has_many :posts

I want to have custom endpoint in User model that returns his signed posts, if I make something like this:

custom_endpoint :signed_posts, on: :member, request_method: :get

It goes to correct url:

/users/:id/signed_posts

but returns posts wrapped as User class objects

Is there any solutions for this?

babrovka avatar Aug 11 '15 10:08 babrovka

Currently, there is not a solution to do this with a custom endpoint.

If you fetch the user object and your server returns the linked path for signed posts (and you have a SignedPost resource), it should follow the link definition url and fetch SignedPost objects.

You could also have your SignedPost resource belongs_to :user and fetch with SignedPost.where(user_id: [userid]).all

chingor13 avatar Aug 14 '15 19:08 chingor13

You can also write a custom parser that resolves the model from the "type"

def handle_data(result_set, data)
  ...
  record_class = choose_model_for(result_set, res)
  ...
end

def choose_model_for(result_set, res)

  res_type_name = res['type'].singularize.camelize
  (res_type_name.safe_constantize) ? res_type_name.safe_constantize : result_set.record_class

end

jsamos avatar Apr 11 '16 22:04 jsamos

This answer looks like a candidate for a pull request. Any time we get the data it should always infer the class from the returned type.

JohnSmall avatar Jun 27 '16 15:06 JohnSmall