Domanda

Mi chiedevo se qualcuno potrebbe prendere un rapido sguardo a questo. Sto facendo una semplice applicazione di conversione che converte tra unità di misura. Ho bisogno di essere in grado di auto riferimento alla tabella utilizzando una tabella che memorizza la relazione tra ciascuno, insieme con la conversione tra ogni join. Questo allora dovrebbe essere indicata tra entrambi i lati della relazione. Per esempio 1 centimetro = 10mm e 10 mm = 1 centimetro.

Quindi finora ho questo:

#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 %>

Per la maggior parte questo funziona bene. Solo che non posso accedere al nome del relativo provvedimento, solo il proprietario.

ho bisogno di ottenere in qualche modo simile a questo:

f_r_m.object.related_measure.name

ma è chiaro che nonostante i miei sforzi non riesco a configurarlo e ricevere l'errore.

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

Aiuto sarebbe molto apprezzato. :)

È stato utile?

Soluzione

A prima vista il problema deriva dal ha molti attraverso la definizione. Avendo definito la chiave esterna, ringhiere, assume measure_id nella tabella join. Il che sarebbe solo un collegamento alla misura che si sta cercando di trovare da.

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

Non possiamo diagnosticare questo errore senza vedere l'interno del modello di aderire.

f_r_m.object.related_measure si riferisce a unirsi a tavola.

Ma ho il sospetto che sia perché non è stata definita la relazione correttamente nel modello di aderire. Quale dovrebbe essere simile a questo:

class MeasureMeasures < ActiveRecord::Base
    belongs_to :measure
    belongs_to :related_measure, :classname => "Measure"
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top