Belongs_to falla

He definido la relación entre usuario y provincia, de forma estándar:

Usuario.rb -> belongs_to :provincia, :foreign_key => ‘provincia_id’
Provincia.rb -> has_many :usuarios

Pero luego, funciona como si no se hubiera creado el belongs_to:

@usuario = Usuario.find(session[:usuario_id])
raise @usuario.provincia.inspect
-> nil
raise @usuario.provincia_id.inspect
-> 15

(por supuesto, existe la provincia con id = 15)

¿Alguna idea de por qué se produce esta anomalía?

On Dec 17, 2007, at 12:54 AM, Fernando C. wrote:

He definido la relación entre usuario y provincia, de forma estándar:

Usuario.rb -> belongs_to :provincia, :foreign_key => ‘provincia_id’

Aqui la :foreign_key es redundante, se calcula a partir del nombre de
la relacion. Si la relacion se llama :provincia la llave por defecto
se asume que es “provincia_id”, y la clase asociada Provincia.

Pero luego, funciona como si no se hubiera creado el belongs_to:

@usuario = Usuario.find(session[:usuario_id])
raise @usuario.provincia.inspect
-> nil
raise @usuario.provincia_id.inspect
-> 15

Puedes copiar lo relevante en db/schema.rb y en los dos modelos sin
editarlos?

– fxn

Xavier N. wrote:

On Dec 17, 2007, at 12:54 AM, Fernando C. wrote:

He definido la relaci�n entre usuario y provincia, de forma est�ndar:

Usuario.rb -> belongs_to :provincia, :foreign_key => ‘provincia_id’

Aqui la :foreign_key es redundante, se calcula a partir del nombre de
la relacion. Si la relacion se llama :provincia la llave por defecto
se asume que es “provincia_id”, y la clase asociada Provincia.

Sí, inicialmente lo hice así, pero como no iba decidí explicitarlo a ver
si daba mejor resultado… aunque obviamente, no ha servido de nada.

Pero luego, funciona como si no se hubiera creado el belongs_to:

@usuario = Usuario.find(session[:usuario_id])
raise @usuario.provincia.inspect
-> nil
raise @usuario.provincia_id.inspect
-> 15

Puedes copiar lo relevante en db/schema.rb y en los dos modelos sin
editarlos?

– fxn

Ya ha salido el fallo, estaba en Provincia.rb, en una función que añadió
un compañero para ordenar por defecto:

class Provincia < ActiveRecord::Base
has_many :productos
has_many :usuarios
has_many :socios
belongs_to :pais
belongs_to :comunidad
validates_presence_of :pais_id, :comunidad_id, :nombre, :nombre_corto,
:position

setea por default que el orden sea por nombre si le asigna ninguno.

def self.find(*args)
order_arg = args.collect do |arg|
if arg.kind_of? Hash
if arg.keys[0] == :order
arg
end
end
end

if order_arg.compact.empty?
  args << {:order => "nombre ASC"}
end

super

end
end

Quitando esta función, ya funciona… ahora se lo comentaré a mi
compañero, para ver si la quitamos definitivamente o se la curra para
que no estropee el funcionamiento normal.

Muchas gracias.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs