I created a Ruby on Rails API application where I wanted to implement a JSON api with fast_jsonapi. Now I'm struggling with the relationships, which aren't shown. What do I have to change?
This is my schema.db:
create_table "candidates", force: :cascade do |t|
t.string "place"
t.string "zip_code"
t.string "address"
t.string "date_of_birth"
t.string "title"
t.string "profile_picture"
t.string "first_name"
t.string "last_name"
t.string "email_address"
t.boolean "confirm_terms_and_conditions"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "candidates_degrees", id: false, force: :cascade do |t|
t.bigint "candidate_id"
t.bigint "degree_id"
t.index ["candidate_id"], name: "index_candidates_degrees_on_candidate_id"
t.index ["degree_id"], name: "index_candidates_degrees_on_degree_id"
end
create_table "degrees", force: :cascade do |t|
t.string "degree"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
And these are my models:
class Candidate < ApplicationRecord
has_and_belongs_to_many :degrees, dependent: :nullify
end
class Degree < ApplicationRecord
has_and_belongs_to_many :candidates, dependent: :nullify
end
These are my serializers:
class CandidateSerializer
include FastJsonapi::ObjectSerializer
attributes :place, :zip_code, ...
has_many :degrees
end
class DegreeSerializer
include FastJsonapi::ObjectSerializer
attributes :degree
has_many :candidates
end
you need to do changes in your CandidateSerializer
and DegreeSerializer
.
Instead of writing the separate HABTM relation in serializer you can directly right in attributes
e.g
class CandidateSerializer
include FastJsonapi::ObjectSerializer
attributes :place, :zip_code,:degrees
end
response
{
:data=>
{:id=>"",
:type=>:candidate,
:attributes=> {
degrees: {}
}
}
same for DegreeSerializer
class DegreeSerializer
include FastJsonapi::ObjectSerializer
attributes :candidates
end