2017-12-17 6 views
-2

Ich habe drei Modelle, die ich verbinden muss.Wie richte ich eine benutzerdefinierte ActiveRecord-Zuordnung ein?

Diese Modelle sind:

Container 

Item 

ItemProperty 

Ich kann nicht herausfinden, wie alle Elemente zum Container gehören, zu finden. Jedem Artikel sind viele ItemProperties zugeordnet. Von diesen Item-Eigenschaften gibt es mindestens eine, die die folgenden Daten enthält.

# id: 2164 
# property_key: container_id 
# property_value_integer: 1 
# world_item_id: 438 
# property_value_type: integer 
# is_active: 1 

Wie würde ich finden, welche Gegenstände in den Behälter gehören auf die ItemProperty basiert, die

property_key: container_id 
property_value_integer: 1 (this is the id of the container) 

Bitte helfen enthält, danke!

Aktuelle Verbände:

class ItemProperty < ApplicationRecord 
    belongs_to :item, :class_name => 'Item', :foreign_key => 'item_id' 
end 

class Item < ApplicationRecord 
    has_many :item_properties 
end 
+3

Ich verstehe deine Frage nicht. Könnten Sie deutlich veranschaulichen, wie die Fremdschlüssel für jedes Modell eingerichtet sind? Verfügt auch jede Elementeigenschaft über property_value_integer oder nur einige? – sakurashinken

+1

Es sieht so aus, als ob Ihre ItemProperty keine 'item_id' Attribute hat. Aber es gibt ein 'world_item_id' Attribute. Ich bin verwirrt ... – spickermann

+0

Welchen Code haben Sie versucht und was war der Fehler, den er zeigte? –

Antwort

1

Versuchen Sie dies. Der Schlüssel nehmen hier weg ist die has_many xxx, : durch => yyy

class Container < ApplicationRecord 
belongs_to :item #or has_many :items depending on your needs 
has_many :item_properties, :through => :items 
end 

class Item < ApplicationRecord 
    has_many :item_properties 
end 

class ItemProperty < ApplicationRecord 
    belongs_to :item, :class_name => 'Item', :foreign_key => 'item_id' 
end 

Anschließend können Sie abfragen, für den Behälter (n) eines ausgewählten Elements Eigenschaft. Ich hoffe es hilft.

Verwandte Themen