1

が含まだから我々は(多くの多くを介して)、そのような場合があります。Railsの5リターンのすべてのレコードと必要な関連

class Company < ActiveRecord::Base 
    has_many :contracts 
    has_many :subscribers, through: :contracts 
    end 

    class Contract < ActiveRecord::Base 
    belongs_to :company 
    belongs_to :subscriber 
    end 

    class Subscriber < ActiveRecord::Base 
    has_many :contracts 
    has_many :companies, through: :contracts 
    end 

のため

詳細SUBSCRIBER_IDにより、すべての企業との契約を返すためにお役立てください例=>

私たちは、だから今私たちに必要な関連

を持つ企業を取得することができます

をSUBSCRIBER_IDています10社の

Company.includes(:contracts).where(contracts: {subscriber_id: params[:id]}) 

しかし、そのリターン企業のみ必要な関連を持つが、我々はすべての企業 )社の企業の各インスタンスを返し、すべての企業

期待される結果

1)を返す必要があります[0]。契約は協会加入者とのみ契約を返すか、空の配列を返すべきである

このようにjsonを構築し、契約条件がブロックされている場合は除外する:

json.data do 
    json.companies @companies do |company| 
    json.id company.id 
    json.name company.name 
    json.full_name company.full_name 
    json.owner company.owner, :name, :email, :phones 
    json.contracts company.contracts do |contract| # => should return contract by subscriber_id or empty array 
     json.id contract.id 
     json.company_id, contract.company_id 
     json.status contract.status 
    end 
    end 
end 

答えて

1

たぶん、私たちはこのような条件を除外し、ちょうど右の情報を含むデータベースへの1つの右の要求を行いたいこの

Company.joins('LEFT JOIN contracts ON companies.id = company_id').where(contracts: {subscriber_id: params[:id]}) 
+0

のようなものを試してみてください。これは可能ですか? –

+0

このリクエストは、現在の加入者と契約している会社のみを返します。 1)会社が現在の契約者と契約している場合は、この会社を返却し、company.contractsは現在の契約者との契約のみを返します。 2)会社は現在の契約と契約していない私たちはこの会社も返しますが、company.contractsは空の文字列を返すべきです –

関連する問題