ruby-on-rails - through - rails references




Usar build con una asociaciĆ³n has_one en rieles (3)

En este ejemplo, creo un user sin profile , luego creo un profile para ese usuario. Intenté usar build con una asociación has_one , pero explotó. La única forma en que veo que esto funciona es usando has_many . Se supone que el user solo tiene como máximo un profile .

He estado intentando esto. Yo tengo:

class User < ActiveRecord::Base
  has_one :profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
end

Pero cuando lo hago:

user.build_profile 

Me sale el error:

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'profiles.user_id' in 'where clause': SELECT * FROM `profiles` WHERE (`profiles`.user_id = 4)  LIMIT 1

¿Hay alguna manera de barajar para tener 0 o 1 asociación?


Debería ser un has_one . Si la build no funciona, puedes usar new :

ModelName.new( :owner => @owner )

es lo mismo que

@owner.model_names.build

Eche un buen vistazo al mensaje de error. Le dice que no tiene columna user_id requerida en la tabla de perfil . Establecer las relaciones en el modelo es solo una parte de la respuesta.

También necesita crear una migración que agregue la columna user_id a la tabla de perfil. Rails espera que esté allí y, si no es así, no puede acceder al perfil.

Para obtener más información, consulte este enlace:

Conceptos básicos de la asociación