Problem to show all json objects related to a model by its id in RoR


I have a show method that must render objects json of three models that are related to each other by their id .

The models are the following:

class Company < ApplicationRecord
  has_many :areas

class Area < ApplicationRecord
  belongs_to :company
  has_many :area_contacts

class AreaContact < ApplicationRecord
  belongs_to :area

Where company has a company_id and is related through this field to the area model, and area_contact is related to the area model through the field area_id.

My show method in the _companies_controller.rb_ file is defined as follows:

def show
  @areas = @company.areas
  @area_contacts =  AreaContact.includes(:area).find_by_area_id(@areas.ids)

  render json: { company: @company,
                 areas: @areas,
                 area_contacts: @area_contacts

The problem is that it only brings me the first area_contact , no matter how many are related to area_id that the query is brought when I call the company. That is, if I consult the company_id = 1 , it will bring me all the areas that have company_id = 1 , and in turn should bring me all area_contact related to area_id that the query was brought by the company_id = 1 , but It only brings me first.

So I think the problem is defined in this part of my code:

@area_contacts =  AreaContact.includes(:area).find_by_area_id(@areas.ids)

Please, I appreciate any help or comment.

asked by Polarwinds 16.12.2018 в 18:20

1 answer


The problem is in the find_by_area_id method (just in the line you identified with the error) since it will always return the first result it finds; to return all the results you must use where instead:

@area_contacts =  AreaContact.includes(:area).where(area_id: @areas.ids)
answered by 16.12.2018 / 18:29