Frage

Ich fragte mich, ob sich das jemand kurz ansehen könnte.Ich erstelle eine einfache Konvertierungsanwendung, die zwischen Maßeinheiten umrechnet.Ich muss in der Lage sein, die Tabelle selbst zu referenzieren, indem ich eine Join-Tabelle verwende, die die Beziehung zwischen den einzelnen Tabellen sowie die Konvertierung zwischen den einzelnen Tabellen speichert.Darauf würde dann zwischen beiden Seiten der Beziehung verwiesen.Zum Beispiel 1 cm = 10 mm und 10 mm = 1 cm.

Bisher habe ich Folgendes:

#migrations
create_table :measures do |t|
    t.string :name
end

create_table :measure_measures do |t|
    t.integer :measure_id
    t.integer :related_measure_id
    t.integer :conversion
end

class Measure < ActiveRecord::Base    

    has_many :related_measures,  
        :foreign_key => 'measure_id',
        :class_name => 'MeasureMeasure',
        :dependent => :destroy

    has_many :measures,  :through => :related_measures

    accepts_nested_attributes_for :related_measures, 
        :reject_if => proc { |attrs| attrs['related_measure_id'].blank? ||  
                                     attrs['quantity'].blank? }, 
        :allow_destroy => true      
end

#controller
    @measure = Measure.find params[:id

#form
    <% form_for @measure do |f| %>
        <% fields_for :related_measures do |f_r_m| %>
            <%= f_r_m.text_field :related_measure_id -%>
            <%= f_r_m.text_field :quantity -%>
        <% end %>
    <% end %>

Meistens funktioniert das gut.Allerdings kann ich nicht auf den Namen der zugehörigen Maßnahme zugreifen, sondern nur auf den Eigentümer.

Ich muss es irgendwie so hinbekommen:

f_r_m.object.related_measure.name

Aber offensichtlich kann ich es trotz meiner besten Bemühungen nicht einrichten und erhalte die Fehlermeldung.

undefined method `owner_measure' for #<MeasureMeasure:0x1053139a8> 

Hilfe wäre sehr dankbar.:) :)

War es hilfreich?

Lösung

Auf den ersten Blick liegt das Problem darin, dass es viele Definitionen gibt.Da der Fremdschlüssel nicht definiert werden kann, geht Rails davon aus, dass „measure_id“ in der Join-Tabelle enthalten ist.Das würde einfach auf die Kennzahl verweisen, anhand derer Sie es finden möchten.

has_many :measures,  :through => :related_measures, :foreign_key => :related_measure_id

Wir können diesen Fehler nicht diagnostizieren, ohne die inneren Abläufe des Join-Modells zu kennen.

f_r_m.object.related_measure bezieht sich auf die Join-Tabelle.

Aber ich vermute, dass es daran liegt, dass Sie die Beziehung im Join-Modell nicht richtig definiert haben.Was etwa so aussehen sollte:

class MeasureMeasures < ActiveRecord::Base
    belongs_to :measure
    belongs_to :related_measure, :classname => "Measure"
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top