IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

requete de sélection lors d'un post


Sujet :

Ruby on Rails

  1. #1
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut requete de sélection lors d'un post
    Bonjour à tous

    Je suis en train de mettre en place une application développée sous ruby on rails.
    Pour cette application je dois développer un plugin.

    J'affiche un formulaire(jusque la tout va bien)
    Lorsque je valide mon formulaire en cliquant sur le bouton j'aimerai faire apparaitre des tableaux avec les temps de pointages de ceux ci.

    Je vous montre tout d'abord mon code

    Voici le code de mon formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <h2>Timesheet</h2>
     
    <p>
    <% form_for :timesheet, :url =>{:action => 'index', :id => @user} do |f|  %>
     
    <p><label for="timesheet_date_from">From:</label><br />
    <%= f.text_field "date_from", :size => 10, :value => @from %><%= calendar_for('timesheet_date_from') %></p>
     
    <p><label for="timesheet_date_to">To:</label><br />
    <%= f.text_field "date_to", :size => 10, :value => @to %><%= calendar_for('timesheet_date_to') %></p>
     
    <p><label for="timesheet_project_id">User:</label><br />
    <%= f.select("user_id", User.find(:all, :conditions =>'firstname!=""',:order => 'login ASC').collect {|u| [ u.name, u.id ] }, { :include_blank => true }) %></p>
     
    <%= submit_tag "Get results" -%>
    <% end %>
     
    <% content_for :header_tags do %>
        <%= javascript_include_tag 'calendar/calendar' %>
        <%= javascript_include_tag "calendar/lang/calendar-#{current_language}.js" %>
        <%= javascript_include_tag 'calendar/calendar-setup' %>
        <%= stylesheet_link_tag 'calendar' %>
    <% end %>
    Voici le code de mon controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    # Sample plugin controller
    class TimesheetController < ApplicationController
    	unloadable
     
    	layout 'base'
     
    	helper :sort
    	include SortHelper
    	helper :issues
     
    	def index
    		@today = Date.today.to_s
    		@sevendayago=(Date.today - 7).to_s
     
    		case request.method
     
    			when :post
     
    				@timesheet = Timesheet.new
    				@timesheet.date_from = params[:timesheet][:date_from]
    				@timesheet.date_to = params[:timesheet][:date_to]
    				@timesheet.user_id = params[:timesheet][:user_id]
     
    				if @timesheet.user_id == ""
    					@users = User.find(:all, :conditions =>'firstname!=""');
    				else
              @users = [User.find(@timesheet.user_id)]
    				end
     
    				@entries = { }
     
    				@users.each do |user|
    					logs = user.time_entries.find(:all,
                                    :conditions => ['spent_on >= (?) AND spent_on <= (?) ',
    				                                                  @timesheet.date_from, @timesheet.date_to],
    				                         :order => "spent_on ASC")
    				        @entries[user.login] = logs unless logs.empty?
          end
     
    			when :get
     
          				@from,@to = @sevendayago,@today
          				@entries = []
    		end
    	end
     
    end
    D'après ce que j'ai compris, en fonction des valeurs de ma liste je fais une requête qui me sélectionne sois un sois plusieurs utilisateurs. Ensuite pour chaque utilisateur j'aimerai sélectionner les valeurs qu'il a rentré dans la table time_entries. Ce qui les relie est le champ user_id

    Le probleme est que je passe cette ligne(@users.each do |user|), j'ai un message d'erreur qui m'indique que la méthode find n'est pas connu

    Je rajoute à la fin de mon code un fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private
      def find_user
        @user=User.find(params[:user_id])
      end
    que j'appelle juste après layout 'base'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     before_filter :find_user, :authorize
    Un autre message d'erreur apparait me disant Couldn't find User without an ID

    Je ne sais pas si ma requête est fausse où si c'est autre chose.

    En fait je suis débutant et j'ai un peu de mal à me dépatouiller avec ce code, malgré les tuto j'ai du mal

    Merci d'avance pour vos réponses

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Points : 124
    Points
    124
    Par défaut
    Il me semble en effet que tu t'emmêles un peu les pinceaux. Peux-tu faire un copier coller de l'erreur exacte avec la ligne svp. (Pas celle liée au filtre)
    Mon blog sur Ruby on Rails : 2dconcept

  3. #3
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut
    En effet je m'embrouille totalement

    J'ai changer mon code car j'ai vu dans l'application que les erreurs ainsi que mes requêtes s'affichaient dans le fichier log.

    La nouvelle erreur se situe dans ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      @users.each do |user|
            logs = user.time_entries.find(:all,
                                             :conditions => ['spent_on >= (?) AND spent_on <= (?) ',
                                                             @timesheet.date_from, @timesheet.date_to],
                                             :order => "spent_on ASC")
            @entries[user.name] = logs unless logs.empty?
          end
    l'erreur indiqué est celle ci
    undefined method `time_entries' for #<User:0x426d4d8>

    Je ne comprends pas trés bien mon code mais je sais que dans ma base de données times_entries est une table.
    Pour moi cette ligne signifie que l'on recherche les time_entries de l'user

    Me tromperai je??

    Merci pour ton aide

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Points : 124
    Points
    124
    Par défaut
    Les relations sont-elles bien définies dans ton modèle?

    Dans User.rb tu dois avoir un has_many :time_entries
    Dans TimeEntry.rb tu dois avoir un belongs_to :user

    Et dans ta table time_entries tu dois avoir un user_id.

    Est-ce bien le cas?
    Mon blog sur Ruby on Rails : 2dconcept

  5. #5
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut
    Merci bien il me manquait le has_many dans User.rb

    Je me permet de rajouter une petite question

    Ma requete ne retourne aucun enregistrement pour une certaine valeur comment je peu faire pour que cela ne me crée pas une erreur car j'ai essayé avec une valeur ou j'avais des enregistrements et la cela ne me fais pas d'erreurs

    encore merci beaucoup car j'aurai pu chercher pendant des heures,des jours peut etre des années entières

  6. #6
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    @user = User.find params[:id] rescue nil
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 127
    Points : 124
    Points
    124
    Mon blog sur Ruby on Rails : 2dconcept

  8. #8
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut
    J' ai toujours un souci avec ma requete. Lorsque que je l'exécute celle ci s'affiche dans mon fichier log.

    En s'exécutant j'obtient cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    You have a nil object when you didn't expect it!
    You might have expected an instance of Array.
    The error occurred while evaluating nil.[]=
    Alors que lorsque j'exécute cette requête dans phpmyadmin elle s'exécute bien et je n'obtient aucune valeur nulle

  9. #9
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    ça veux dire que lorsque tu essaies d'accéder à ton objet, sa valeur est à nil, donc il n'existe pas.

    il faut donc que tu teste ton objet avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if @mon_objet
    ...
    end
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  10. #10
    Membre actif Avatar de maxeur
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    416
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 416
    Points : 267
    Points
    267
    Par défaut
    Ok merci pour ta réponse et désolé pour le temps que j'ai mis pour te répondre. Ca y est cela fonctionne c'était bien cela je ne vérifiai pas ma valeur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requete de sélection aléatoire distincte
    Par calitom dans le forum Langage SQL
    Réponses: 9
    Dernier message: 21/12/2006, 17h59
  2. [MySQL] Paramètrer ma requete après sélection dans un formulaire
    Par philippef dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 08/11/2006, 13h39
  3. L'enregistrement est supprimé (requete de sélection)
    Par papy_tergnier dans le forum Access
    Réponses: 1
    Dernier message: 17/05/2006, 15h14
  4. Requete de sélection des 5 dernièrs entrées.
    Par WriteLN dans le forum Administration
    Réponses: 4
    Dernier message: 22/03/2004, 21h40
  5. Aide sur une requete de sélection
    Par stephdiplo150 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/01/2004, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo