2016-06-29 11 views
1

Ich muss das Schnittmengeergebnis von zwei ActiveRecord Relation-Objekten finden. Das ist mein Controller-Wie kann ich zwei ActiveRecord Relation-Objekte über Schienen verbinden?

if params.has_key?(:car_insurance_type_id) 
    car_insurance_type = CarInsuranceType.find_by(id: params[:car_insurance_type_id]) 
else 
    car_insurance_type = CarInsuranceType.find_by(id: 1) 
end 

@breadcrumb_title = car_insurance_type.title 

car_insurance_objects_private = car_insurance_type.car_insurance_objects 

if params.has_key?(:car_model_id) 
    car_model_search = CarModel.find_by(id: params[:car_model_id]) 

    if car_model_search 
    car_insurance_objects_from_model = car_model_search.car_insurance_objects 
    end 

end 

car_insurance_objects_private = car_insurance_objects_private & car_insurance_objects_from_model 

Aber „&“ -Methode nicht

Diese für Active Objekt arbeiten, ist mein Modell

class CarInsuranceType < ActiveRecord::Base 

    has_many :car_insurance_objects ,dependent: :destroy 

end 

class CarInsuranceObject < ActiveRecord::Base 

    belongs_to :insurance_company 
    belongs_to :car_insurance_type 
    has_and_belongs_to_many :car_models 

end 

class CarModel < ActiveRecord::Base 

    belongs_to :car_brand 
    has_and_belongs_to_many :car_insurance_objects ,dependent: :destroy 

end 

So wie kann ich die Kreuzung Ergebnis zwischen zwei CarInsuranceObject finden gehört man zu car_insurance_type und ein anderes, das has_and_belongs_to_many car_models hat?

Danke!

Antwort

2

Soweit ich verstehe, müssen Sie DB für CarInsuranceObject der angegebenen CarInsuranceType und CarModel abfragen. Warum all dieses Zeug zu vereinfachen nicht:

car_insurance_type_id = params[:car_insurance_type_id] || 1 
car_insurance_objects_private = car_model_search.car_insurance_objects.where(car_insurance_type_id: car_insurance_type_id) 

Btw, es ist wirklich langer Name für Variablen.

+1

lange Variablennamen sind aussagekräftiger und vorausgesetzt, dass fast jeder moderne Codeeditor Namensvervollständigung hat, ist es kein Problem, mit den langen Namen zu arbeiten. – jaydel

Verwandte Themen