Asociacion doble con modelos

Buenas noches.

no se como hacer esta asociacion.

tengo un modelo con los meses del año y otro donde debo registrar un mes
inicial y un mes final, la vista me guarda bien, pero cuando quiero
mostrarlo en el show, siempre me trae el rango superior del mes. como
puedo corregir esto?

class Mes < ActiveRecord::Base
has_many :aportes, :class_name => ‘Mes’, :foreign_key => ‘mesi_id’
has_many :aportes, :class_name => ‘Mes’, :foreign_key => ‘mesf_id’
end

class Aporte < ActiveRecord::Base
belongs_to :mes, :foreign_key => ‘mesi_id’
belongs_to :mes, :foreign_key => ‘mesf_id’
end

y el show lo tengo asi:

Mes Inicial: <%[email protected] %> Mes Final: <%[email protected] %>

gracias por vuestra ayuda.

Sería importante que los atributos de los modelos no tengan el mismo
nombre.
Estás definiendo y redefiniendo acto seguido por lo que la segundo
definición está machacando a la primera y en ningún momento vas a usar
el
campo ‘mesi_id’ para almacenar.
Un saludo,
Juan

Juan G. Galisteo
w. http://juan.gg

2009/4/23 Aprendiz_ror Ruby on rails [email protected]

Les estás dando el mismo nombre a las asociaciones. Simplemente llámalas
diferente

class Aporte < ActiveRecord::Base
belongs_to :mes_inicial, :class_name => ‘Mes’, :foreign_key =>
‘mesi_id’
belongs_to :mes_final, :class_name => ‘Mes’, :foreign_key => ‘mesf_id’
end

También parece que has entendido mal el parámetro class_name. Es el
nombre de la clase con la que asocias. Observa los belongs_to de Aporte.
Así, también, en la clase Mes, las asociaciones deberían ser así:

class Mes < ActiveRecord::Base
has_many :aportes_inicial, :class_name => ‘Aporte’, :foreign_key =>
‘mesi_id’
has_many :aportes_final, :class_name => ‘Aporte’, :foreign_key =>
‘mesf_id’
end

y en las vistas (o controlador o donde sea) usas el nombre que le has
dado:

Mes Inicial: <%[email protected]_inicial.nombre %> Mes Final: <%[email protected]_final.nombre %>

El primer parámetro del belongs_to es el nombre de la asociación. Por
convenio, cuando estás en un belongs_to por ejemplo, si usas como nombre
de asociación el del modelo de destino, rails busca solito la clase con
la que enganchar y la clave ajena correspondiente. En tu caso, como
tienes varias asociaciones al mismo modelo y se deben llamar distinto a
la clase de destino, hay que especificarle la clase con la que asociarse
así como la clave que usar.

Te aconsejo que eches un vistazo a las rails guides, que están muy bien
y explican esto perfectamente:

P.d. No sé por qué la página hoy no va. Tampoco va la de la
documentación de la API. Igual no han pagado algunas facturas…

Aprendiz_ror Ruby on rails escribió:

Una pregunta tonta. ¿Por qué no usas la solución más fácil? Usar campos
de
tipo date, jugando solo con el mes, pasando del día y del año, y que
rails y
i18n se encargue de la tradución del nombre del mes de forma
transparente
para ti.


Guillermo Álvarez

Sent from Madrid, Comunidad de Madrid

Buenas

gracias a todos hoy comprendi algo nuevo.

hice lo sugerido de Jesus y me funciono, pero tengo ganas de aplicar lo
que me sugiere Guillermo, aunque se requiere en digitar en la vista son
un rango de meses, ej: pago desde mes_inicial a mes_final y no quiero
que tengan que seleccionar o ingresar los dias, pero es valido.

mil graciass

Gracias Guillermo, yo utilizo el plugin caledar_date_select, mirare si
puedo hacer lo que me sugieres.

saludos

2009/4/24 Aprendiz_ror Ruby on rails [email protected]

no quiero que tengan que seleccionar o ingresar los dias, pero es valido.

Pues desactiva el día y el año. Nadie te obliga a usarlos.
Te copio la documentación estandar de rails:

date_select
(ActionView::Helpers::DateHelper)http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#M001666

date_select(object_name, method, options = {}, html_options = {})
:discard_day - Set to true if you don‘t want to show a day select.
This
includes the day as a hidden field instead of showing a select field.
Also
note that this implicitly sets the day to be the first of the given
month in
order to not create invalid dates like 31 February.
:discard_year - Set to true if you don‘t want to show a year select.
This
includes the year as a hidden field instead of showing a select field.


Guillermo Álvarez

Sent from Madrid, Comunidad de Madrid