Salut les gars. Je suis novice dans le développement des rails et je suis tombé sur un mur. L'application sur laquelle je travaille est une solution d'ordonnancement qui nécessite la mise à jour d'un modèle de jointure, mais pas d'une manière simple 1: 1.Mise à jour d'un formulaire en 2 dimensions
L'application est aménagé comme suit:
class Route < ActiveRecord::Base
has_many :markers, :foreign_key => 'source_id'
has_many :schedules
accepts_nested_attributes_for :markers, :allow_destroy => true, :reject_if => proc { |a| a['name'].blank? }
accepts_nested_attributes_for :schedules, :allow_destroy => true, :reject_if => proc { |a| a['name'].blank? }
end
class Schedule < ActiveRecord::Base
has_many :arrivals
has_many :markers, :through => :arrivals
accepts_nested_attributes_for :arrivals, :allow_destroy => true, :reject_if => :all_blank
end
class Marker < ActiveRecord::Base
has_many :arrivals
has_many :schedules, :through => :arrivals
end
class Arrival < ActiveRecord::Base
belongs_to :marker
belongs_to :schedule
end
... donc un has_many de base: par ... ou alors je pense: P
Lorsque vous créez un itinéraire, vous pouvez créer des horaires 1..n et des marqueurs 1..n. La modification d'une planification devrait vous permettre d'ajouter des entrées d'arrivée 1..n pour chaque marqueur défini dans l'itinéraire. C'est ce qui me cause du chagrin.
Grâce à la magie de ascii-art, ce que je veux l'application pour ressembler à:
/views/routes/edit.html.erb (works already)
ROUTE
-----
...
SCHEDULES
---------
[Add]
* Schedule 1 [Edit][Delete]
* Schedule 2 [Edit][Delete]
...
MARKERS
-------
[Add]
* Marker 1 [Edit][Delete]
* Marker 2 [Edit][Delete]
* Marker 3 [Edit][Delete]
* Marker 4 [Edit][Delete]
...
/views/schedules/edit.html.erb
SCHEDULE X
----------
[Add Col.]
Marker 1 [ ] [ ]
Marker 2 [ ] [ ]
Marker 3 [ ] [ ]
Marker 4 [ ] [ ]
[x] [x]
(the [x] should remove a column)
EDIT (09NOV04):
J'ai supprimé le code de la vue incomplète que j'avais à l'origine posté, mais j'aimerais mettre à jour la question un peu.
Je pense qu'une partie de la confusion ici (pour moi-même, et peut-être pour quelqu'un qui pourrait être en mesure d'aider) est que je n'ai pas expliqué les relations correctement.
- marqueurs ont beaucoup d'arrivées
- horaires ont de nombreux marqueurs
- routes ont beaucoup horaires
Ce sont les bases. Avoir un formulaire qui mettrait à jour les arrivées pour un marqueur unique ne serait pas difficile, car c'est une forme basique. Ce que j'espère faire est de fournir un formulaire qui met à jour tous les marqueurs en même temps.
Lorsque vous cliquez sur "Ajouter une entrée", vous devez ajouter une nouvelle arrivée pour chaque marqueur actuellement disponible. Sous chaque "colonne", il devrait y avoir un bouton "supprimer", qui va supprimer chaque arrivée pour cette colonne particulière (donc de chaque marqueur).
Je ne suis pas sûr si cela clarifie les choses tout: P
Maintenant que j'ai route_markers, je peux obtenir les marqueurs dans mon contrôleur en faisant un @ schedule.route_markers.find (: all), et l'utiliser pour construire la liste dans la vue. C'est ce que j'essaie de faire qui me gêne un peu. J'utilise la liste des marqueurs pour construire une table simple. Chaque "rangée" devrait représenter un certain nombre d'entrées d'arrivée pour un marqueur particulier. J'utilise l'exemple "complex-forms" pour configurer l'ajout dynamique de "colonnes", mais je ne suis pas sûr de savoir comment configurer cette partie pour la saisie et l'édition. J'ai une configuration de vue "idéale" dans le post original si cela aide. –
Je ne comprends pas ce que vos colonnes sont censées représenter. Est-ce que chaque colonne est supposée être une arrivée? Parce que la façon dont les choses sont disposées maintenant, il n'y a aucun moyen d'associer plusieurs arrivées pour un marqueur. Pourriez-vous mettre à jour votre question avec une meilleure explication du formulaire? – EmFi
Hey Emfi, Ce que j'essaie de faire est la suivante: Chaque marqueur peut avoir plusieurs arrivées. Ce que je veux faire, c'est pouvoir ajouter une nouvelle "colonne" d'arrivées basée sur le nombre de marqueurs disponibles. Je pense que c'est là que ça devient salissant. Vous ne devriez pas être en mesure d'ajouter des entrées "uniques" à la fois, bien que techniquement, c'est comme cela que cela sera stocké dans la base de données. L'utilisation est la suivante: Si vous avez des marqueurs appelés Point1, Point2 ... Pointn, lorsque vous cliquez sur "Ajouter", vous devez générer des champs pour CHAQUE marqueur, et chaque champ représente une arrivée. –