tengo mis modelos de configuración de este modo:rieles belongs_to no programar una ID de clave externa con el nombre de la clase personalizada
class User < ActiveRecord::Base
has_many :posts, :foreign_key => 'author_id'
end
class Post < ActiveRecord::Base
belongs_to :author, :class_name => 'User'
end
Suponiendo:
p = Post.first # just any post instance
a = User.first # any user instance
Ahora bien, esta pieza de código está actuando muy raro
p.author = a
Después de configurar el autor, el atributo author_id
de la publicación debe establecerse en la identificación del usuario. Pero esto no está sucediendo.
Intenté usar modelos con belongs_to
que no tienen el parámetro class_name
y todo funciona como se esperaba.
Ahora, una cosa más que lo hace más raro es que cuando cambio la asociación a belongs_to :author, :class_name => 'User', :foreign_key => 'author_id'
, sorprendentemente funciona.
¿Esto es un error en Rails 3.0.9? El parámetro clave externa no debería ser innecesario porque, como dicen los documentos, su valor predeterminado es el nombre de la asociación a la que se agrega _id
.
También tenga en cuenta que incluso sin :foreign_key => 'author_id'
, todo lo demás con respecto a la asociación funciona como se esperaba. (Como buscar el modelo asociado) Lo único que no funciona es el método setter que no establece la clave externa.
sé que solo podía hacer p.author_id = a.id
o simplemente añadir :foreign_key
params a todos mis asociaciones con class_name
, pero yo prefiero el más elegante sintaxis de p.author = a