2 Stimmen

Finden Sie durch Verbundenheit auf eine bessere Weise

Ich habe diese Abfrage:

city.city_combat_units.includes(:combat_unit).where('combat_units.name = ?', 'unit name')

Ein city_combat_unit ist eine combat_unit, die zu einer Stadt gehört. Eine combat_unit hat ein Name-Attribut. Ein city_combat_unit hat ein city_id- und ein number_of_units-Attribut:

CombatUnit
  name

City

CityCombatUnit
  city_id
  combat_unit_id
  number_of_units

Was ich tun möchte, ist all die Stadt-Kampfeinheiten für eine Stadt zu erhalten, die einen bestimmten Namen haben. Das Beste, was ich bisher (in einer Zeile) gefunden habe, ist der obige Code, aber ich befürchte, dass ich etwas viel einfacheres übersehe. Tue ich das?

3voto

johnnyx25 Punkte 696

Versuchen Sie, eine has_many :through Beziehung einzurichten

class City < ActiveRecord::Base
  has_many :city_combat_units
  has_many :combat_units, :through => :city_combat_units
end

class CityCombatUnit < ActiveRecord::Base
  belongs_to :city
  belongs_to :combat_unit
end

class CombatUnit < ActiveRecord::Base
  has_many :city_combat_units
  has_many :cities, :through => :city_combat_units
end

Dann sollten Sie in der Lage sein, etwas wie das hier zu machen

city.combat_units.where(:name => 'unit name')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X