2010-05-12 6 views
1

Ceci est assez difficile à expliquer, mais voilà. J'ai une application Rails avec des étudiants, des cours, des devoirs et des notesRemplir les champs de formulaire Rails

Dans la vue des étudiants, il y a une liste de tous les cours qu'un étudiant prend, ainsi que les devoirs associés à ces cours. Toutes les tâches pour lesquelles il existe une note enregistrée entre l'étudiant et l'affectation indiquent également la note, toutes les autres affichent «S/O». Ce que je voudrais faire est d'avoir un lien vers un formulaire avec l'étudiant et le champ d'affectation prérempli, selon le lien sur lequel on a cliqué.

Voici un exemple. Peter Parker a une note pour «l'examen de mathématiques», mais pas pour le «maths CW». Si l'utilisateur clique sur le lien "Ajouter", je souhaite qu'une vue s'affiche avec un formulaire pré-rempli avec le nom de l'étudiant et le nom de l'affectation, prêt pour l'ajout de la note.

alt text http://img695.imageshack.us/img695/7540/screenshot20100512at180.png

Je ne sais pas essentiellement la meilleure façon de transmettre ces données à la forme, ou comment avoir la forme d'afficher les données d'une manière non modifiable.

Merci.

Répondre

3

Jack vous avez quelques questions ici, l'un d'entre eux est relativement facile d'afficher les données d'une manière non modifiable, vous pouvez le rendre désactivé

http://www.w3.org/TR/html401/interact/forms.html#h-17.12

Comment puis-je passer le student_id et assignment_id à la forme? le système ne va être utilisé que localement, mais je vais tout valider tout de même. - Jack

Jack, vous aurez besoin de quelque chose dans votre vue actuelle qui peut passer le student_id et le assignment_id. comme un link_to.

<%= link_to "show me my assignments", {:action => 'show', :controller => "assignments"}, :student_id => student.id, :assignment_id => student.assignment[0].id %> 

(noter qu'il est sans doute préférable d'utiliser des routes reposant, mais cela montre mieux ce qui se passe)

ce que ce lien va faire est d'appeler l'action show du contrôleur de tâches. vous pouvez obtenir les id dans le contrôleur en appelant:

assignment_id = params[:assignment_id] 
student_id = params[:student_id] 
@student = Student.find(:first, :conditions {:id => student_id}) 
... 

Ensuite, dans votre show.html.erb vous auriez besoin dans/app/vues/tâches/répertoire pour rendre votre code de forme, quelque chose comme:

<%= form_for @student, :student ... 

Il y a beaucoup de nombreuses possibilités que j'ai glosées, la question que vous posez est un peu large. Il peut être plus utile de le diviser en morceaux plus petits (se concentrer moins sur l'application et plus sur une seule action) et de demander à nouveau aux membres du forum.

Vous pourriez demander plus:

  • Envoi de données à un contrôleur à partir d'un lien
  • Recherche d'éléments dans votre base de données le contrôleur
  • Création d'un formulaire à partir des variables par exemple dans la contrôleur
  • désactivant enfin le champ text_field dans un formulaire

Je dirais donner ce que j'ai suggéré un coup (envoyer des données de la vue à un contrôleur, puis utiliser ces données du contrôleur pour rendre une autre vue), et si vous ne pouvez pas comprendre quelque chose, essayez de demander à un question très ciblée sur le problème que vous rencontrez, et vous finirez probablement avec un bien meilleur produit.

+1

snowmaninthesun est sur la bonne voie ici, * mais * ne rend pas le champ de formulaire 'disabled' - le rend' readonly'. Les entrées désactivées diffèrent en ce sens qu'elles n'ont pas ** ** leur valeur soumise. – nfm

+0

Merci beaucoup pour cette réponse snowmaninthesun - vraiment l'apprécier et j'ai réussi à le faire fonctionner dans environ 10 minutes en utilisant les pointeurs dans votre réponse. L'homme au sommet – Jack

1

Je créerais simplement un lien vers le formulaire et passerais le student_id et le assignment_id. Vous ne pouvez pas vraiment rendre un champ de formulaire "non modifiable", mais vous pouvez valider que cet utilisateur a l'autorisation de le voir/modifier avant d'afficher et d'enregistrer des informations.

+1

Correction technique. Vous pouvez désactiver un champ de formulaire, mais vous ne devez absolument pas croire que les données qu'il contient sont inchangées. – Anna

+0

Comment est-ce que je passe le student_id et le assignment_id au formulaire? le système ne va être utilisé que localement, mais je vais tout valider tout de même. – Jack

Questions connexes