Rails has_many con nombre de alias

Resuelto doctororange asked hace 15 años • 4 respuestas

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.

doctororange avatar Jul 22 '09 11:07 doctororange
Aceptado

Dale una oportunidad a esto:

has_many :jobs, foreign_key: 'user_id', class_name: 'Task'

Tenga en cuenta que :asse utiliza para asociaciones polimórficas .

Además, la opción Foreign_key para has_many .

Sam Saffron avatar Jul 22 '2009 04:07 Sam Saffron

También puede utilizar alias_attributesi aún desea poder hacer referencia a ellas como tareas:

class User < ActiveRecord::Base
  alias_attribute :jobs, :tasks

  has_many :tasks
end
Pwnrar avatar Aug 03 '2016 22:08 Pwnrar

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)

A. Askarov avatar Jun 09 '2020 10:06 A. Askarov

Para completar la respuesta de @SamSaffron:

Puedes usarlo class_namecon foreign_keyo 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_toatributo en el modelo secundario:

class BlogPostImage
  belongs_to :blog_post
end
Ghis avatar Jun 14 '2019 15:06 Ghis