tengo un modelo User
que tiene muchas projects
y un modelo Project
que puede tener muchas users
, pero también pertenece a un único usuario (es decir, el usuario que ha creado este proyecto). Debe pertenecer a un User
. También permite que una lista de usuarios se asocie con ella, piense en colaboración.Carriles tiene muchos y pertenece a una
Con esto en mente, mis modelos se parecen a esto:
class User < ActiveRecord::Base
has_many :assigned_projects
has_many :projects, :through => :assigned_projects
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :assigned_projects
has_many :users, :through => :assigned_projects
end
class AssignedProject < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
Ahora, cuando quiero crear un nuevo proyecto a través de un User
, esta es la forma en que lo haría:
user = User.create(:name => 'injekt')
user.projects.create(:name => 'project one')
Ahora, sé que projects
se proporciona a través de un modelo de unión AssignedProject
, por lo que project.user
devolverá nil
. Lo que estoy luchando para conseguir mi cabeza alrededor es la mejor manera de asignar el creador del proyecto (que por cierto no se necesidad ser user
, podría ser creator
o algo más descriptivo, con tal de que es de tipo User
).
La idea entonces es crear un método para devolver projects_created
de un User
que seleccionará únicamente los proyectos creados por este usuario. Donde user.projects
, por supuesto, devolverá TODOS los proyectos con los que esté asociado un usuario.
Suponiendo que este tipo de asociación es bastante común, ¿cuál es la mejor manera de lograr lo que quiero? Cualquier dirección es muy apreciada.
Gracias por su respuesta, este no fue mi problema. Era: * Lo que me cuesta entender es la mejor manera de asignar el creador del proyecto (que, por cierto, no necesita ser usuario, podría ser creador o algo descriptivo, siempre que sea de tipo Usuario). * –
@Nuby ¿seguro de qué? Seguro que estoy luchando por asimilar el usuario/creador del proyecto de forma automatizada. sí –
A menos que malinterprete la respuesta de @ Pavling (y su pregunta), lo que está proponiendo es que cree una segunda relación con la tabla de usuarios, llamada 'Creador'. A continuación, puede llamar a 'Project.creator' para obtener el usuario asociado de la asociación' CreatedProjects'. Eso resolvería (creo) tu problema. En cuanto a cómo asignarlo, podría hacer un gancho 'before_create' en el modelo para asignar esto al usuario que está actualmente conectado, o a algún otro usuario (dependiendo de la lógica de su proyecto). – Nuby