Pregunta

Me preguntaba si alguien podría tomar un rápido vistazo a este. Estoy haciendo una aplicación de conversión simple que convierte entre unidades de medida. Tengo que ser capaz de auto referencia a la tabla utilizando una tabla que almacena la relación entre cada uno, junto con la conversión entre cada unión. Esto entonces se hace referencia entre ambos lados de la relación. Por ejemplo 1cm = 10 mm y 10 mm = 1 cm.

Así que hasta ahora tengo esto:

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

En su mayor parte, esto funciona bien. Excepto que no puedo acceder al nombre de la medida relacionada, sólo el propietario.

Tengo que conseguir de alguna manera como esto:

f_r_m.object.related_measure.name

pero es evidente que a pesar de mis mejores esfuerzos no puedo configurarlo y recibe el error.

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

La ayuda sería muy apreciada. :)

¿Fue útil?

Solución

A primera vista, el problema viene de la definición tiene muchos a través. Al no definir la clave externa, rieles, asume measure_id en la tabla de unión. Que ponga el enlace de vuelta a la medida con que está tratando de encontrar de.

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

No podemos diagnosticar este error sin ver las entrañas del modelo de unirse.

f_r_m.object.related_measure se refiere a unirse a la mesa.

Pero sospecho que es porque no se ha definido la relación adecuadamente en el modelo de unirse. Que debe ser algo como esto:

class MeasureMeasures < ActiveRecord::Base
    belongs_to :measure
    belongs_to :related_measure, :classname => "Measure"
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top