Rails has_many con nombre de alias
En mi modelo de Usuario podría tener:
has_many :tasks
y en mi modelo de tarea:
belongs_to :user
Entonces, suponiendo que la clave externa 'user_id' estuviera almacenada en la tabla de tareas, podría usar:
@user.tasks
Mi pregunta es, ¿cómo declaro la relación has_many de modo que pueda hacer referencia a las tareas de un usuario como:
@user.jobs
... o ...
@user.foobars
Muchas gracias.
Dale una oportunidad a esto:
has_many :jobs, foreign_key: 'user_id', class_name: 'Task'
Tenga en cuenta que :as
se utiliza para asociaciones polimórficas .
Además, la opción Foreign_key para has_many .
También puede utilizar alias_attribute
si aún desea poder hacer referencia a ellas como tareas:
class User < ActiveRecord::Base
alias_attribute :jobs, :tasks
has_many :tasks
end
Si usa has_many y desea crear un alias:
has_many :alias_name, through: :model_name, source: :initial_name
(gracias por la corrección Sami Birnbaum)
Para completar la respuesta de @SamSaffron:
Puedes usarlo class_name
con foreign_key
o inverse_of
. Personalmente prefiero el declarativo más abstracto, pero en realidad es solo una cuestión de gustos:
class BlogPost
has_many :images, class_name: "BlogPostImage", inverse_of: :blog_post
end
y debes asegurarte de tener el belongs_to
atributo en el modelo secundario:
class BlogPostImage
belongs_to :blog_post
end