2011-11-09 18 views
6

Hay muchos tutoriales que muestran cómo crear el modelo de instrucciones para un has_many: a través de la relación de los carriles, pero no parece que haya muchos artículos relacionados con el proceso de configuración de formularios para crear y editar estas relaciones. Estoy buscando ayuda (o buenos ejemplos) sobre cómo crear una interfaz que permita a los usuarios administrar este tipo de relaciones en una aplicación de Rails.Creación de controladores y vistas para un has_many: a través de la relación en Rails 3

Este es el escenario:

Tengo usuarios, las relaciones y los atletas. Un usuario puede tener una relación con un atleta en una variedad de funciones: Entrenador, Mentor, Padre o Fan.

Éstos son mis modelos:

class User < ActiveRecord::Base 
    has_many :relationships 
    has_many :athletes, :through => :relationships 
end 

class Athlete < ActiveRecord :: Base 
    has_many :relationships 
    has_many :users, :through => :relationships 
end 

class Relationship < ActiveRecord :: Base 
    belongs_to :users 
    belongs_to :athletes 
end 

Por lo tanto, el siguiente paso es la construcción de las vistas y controladores que me permite crear una relación usuario-a-atleta (con un entrenador, padre, etc. rol), edite la relación o destruya la relación.

En última instancia, mi objetivo es tener un escenario en el que los usuarios pueden crear atletas y elegir la relación asociada.

Desafortunadamente, no encuentro ningún tutorial específico o referencia que me brinde mucho más que las instrucciones del modelo o el ejemplo de una relación has_many.

Si alguien tiene un enlace o un ejemplo que pueda resolver este problema a un nivel simple, debería poder personalizar el resto.

Respuesta

5

La relación que tiene aquí entre su modelo de Usuario y Atleta es esencialmente una relación has_and_belongs_to_many (HABTM). Al ir y venir contigo, parece que estás confundido acerca de cuál sería la mejor forma de crear estas relaciones.

Un buen lugar para comenzar a leer estaría en la documentación de las asociaciones de ActiveRecord, específicamente the documentation for HABTM relationships.

Su configuración de modelo está bien. Ahora que tiene su configuración de relación HABTM, esto es lo que puede hacer. Supongamos que tanto su modelo de atleta como el de usuario son muy simples y no tienen nada más que un atributo name, que es una cadena. Ahora puede hacer un código como éste (esto es resultado de la consola de la consola rieles):

User.create(:name => "Jeff") 
usr = User.first 
=> #<User id: 1, name: "Jeff"> 
usr.athletes 
=> [] 
atl = usr.athletes.create(:name => "Mike") 
=> #<Athlete id: 1, name: "Mike"> 

La línea anterior creará un usuario con el nombre de Mike, y crear automáticamente una entrada en relación con los atributos apropiados para unir los dos . Así que ahora si se llama a esto:

usr.athletes 
=> [#<Athlete id: 1, name: "Mike">] 

Ahora si desea permitir que el usuario dictan cuál es la relación entre ellos y un atleta durante la creación del atleta, usted puede configurar su clase de relación para tener un campo de tipo relationstring, y al crear las relaciones (como acabo exhibidas anteriormente), a continuación, puede hacer algo como esto:

rel = usr.relationships.where(:user_id => usr.id, :athlete_id => atl.id).first 
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => nil> 
rel.relation = "Friend" 
rel.save 
=> #<Relationship id: 1, user_id: 1, athlete_id: 2, :relation => "Friend"> 

Esperemos que esto es más útil que mi respuesta original. Hazme saber si tienes alguna pregunta. Y definitivamente asegúrese de mirar la documentación de Asociaciones ActiveRecord que mencioné anteriormente.

+0

Sí, miré ese ejemplo y simplemente no era muy bueno desde el punto de vista de la explicación; aunque podría ser el único para usar. – wrburgess

+0

Supongo que no estoy muy claro sobre cómo desea que funcione el sitio. Tal vez en la página Atleta # Show, la vista del usuario tiene algo donde pueden presionar un botón para activar un formulario para mostrar, lo que les permite enviar un formulario con un campo de texto donde se agregaría una relación y dictaría cuál es la relación con el atleta en el campo de texto? Lo siento, es lo mejor que puedo hacer sin una explicación más completa de la funcionalidad deseada. – Batkins

+0

En pocas palabras, tengo que crear un formulario en el que un usuario pueda crear un atleta y luego indicar qué rol quiere para la relación (entrenador, padre, etc.). Los formularios Rails parecen sencillos para una asociación Many-to-One, pero no hay muchos ejemplos de cómo crear vistas y controladores para many-to-many (que he encontrado). Puede que esté haciendo esto demasiado difícil, pero todavía estoy tratando de descubrir la "manera de los rieles" de hacer esto. Podría hacer esto en PHP mientras duermo. – wrburgess

0

Pruebe los railscasts o ascii cast. Ahí es donde normalmente comienzo. No estoy seguro de si esto es lo que está buscando, pero hay un tutorial en esos sitios para formularios anidados. Creo que está bajo formas complejas. Valdría la pena leer/ver de todos modos.

Cuestiones relacionadas