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 :

recupérer le contenu d'un form_tag


Sujet :

Ruby on Rails

  1. #1
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut recupérer le contenu d'un form_tag
    Bonjour a tous,

    Je voudrais récupérer le contenu d'un champ form_tag, mais je ne trouve pas comment faire ...
    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <% form_tag(:action=>'calculate_qty') do %>
    		Quantité: <%= text_field_tag(:arg1, @params[:arg1], :size => 5) %> &times
    		<span class="prix"><%= number_to_currency(produit.prix, :unit => '€')%></span>
    		<%= submit_tag :"Ajouter" %>
    	<% end %>
    En rafraichissement la page, j'obtiens cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    You have a nil object when you didn't expect it!
    You might have expected an instance of ActiveRecord::Base.
    The error occurred while evaluating nil.[]
     
    Extracted source (around line #9):
     
    6: 	<%= produit.description%><br />
    7: 	<% form_tag(:action=>'calculate_qty') do %>
    8: 		<!-- Quantité : <%= text_field_tag :qty, '1', :size => 5%> &times --!>
    9: 		Quantité: <%= text_field_tag(:arg1, @params[:arg1], :size => 5) %> &times
    10: 		<span class="prix"><%= number_to_currency(produit.prix, :unit => '€')%></span>
    11: 		<%= submit_tag :"Ajouter" %>
    12: 	<% end %>
    Je pense que c'est le @params[:arg1] qui fait planter le truc mais pourquoi ?

    ps : Je me réfère pour le moment a un livre rails 1.x ... Je me dis qu'il y a peut etre eu un changement avec la nouvelle version 2.0 ?

    Merci d'avance pour votre aide

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    @params à été changé en params.
    Tu trouveras quelques explications ici : Riding Rails : use params, not @params

  3. #3
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Merci Taum,

    J'avais remarqué que je n'obtenais pas d'erreur en enlevant le @ mais comme le mot ne changeait pas de couleur dans l'éditeur, je n'étais pas sur.
    Ceci, dit, je ne parviens toujours pas a récupérer le contenu du champ, pourrais tu m'éclairer la dessus ?

    Merci d'avance

  4. #4
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Bonjour,

    Je reviens sur le sujet, malgré de nombreuses recherches effectuées sur différents site, je ne parviens toujours pas à récupérer la valeur d'un champ form_tag ...

    voici le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <% form_tag( :action => :add_to_cart, :id => produit ) do %>
    		Quantité: <%= text_field_tag(:arg1, params[:arg1], :size => 5) %> &times
    		<span class="prix"><%= number_to_currency(produit.prix, :unit => '€')%></span>
    		<%= submit_tag :"Ajouter à l'offre" %>
        <% end %>
    Le champ s'affiche parfaitement dans la vue, le bouton utilise bien la fonction add_to_cart du controller.
    Mais comment aller rechercher la valeur du champ ??

    Merci d'avance pour votre aide

  5. #5
    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
    Dans tes logs, il doit t'afficher tous les paramètres transmis à ton action quand tu valides...

    Tu pourrais nous faire un copier / coller de ces paramètres STP ?


  6. #6
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Merci

    Voici ci-dessous le log demandé :
    NoMethodError in StoreController#add_to_cart

    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.+

    RAILS_ROOT: E:/InstantRails/rails_apps/offre3
    Application Trace | Framework Trace | Full Trace

    app/models/cart_item.rb:16:in `increment_quantity'
    app/models/cart.rb:11:in `add_produit'
    app/controllers/store_controller.rb:20:in `add_to_cart'

    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1158:in `send'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1158:in `perform_action_without_filters'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:697:in `call_filters'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:689:in `perform_action_without_benchmark'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
    E:/InstantRails/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/rescue.rb:199:in `perform_action_without_caching'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:678:in `perform_action'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/query_cache.rb:8:in `cache'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:677:in `perform_action'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `send'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `process_without_filters'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:685:in `process_without_session_management_support'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/session_management.rb:123:in `process'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:388:in `process'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:171:in `handle_request'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:115:in `dispatch'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:126:in `dispatch_cgi'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:9:in `dispatch'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/rails.rb:78:in `process'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/rails.rb:76:in `synchronize'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/rails.rb:76:in `process'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:618:in `process_client'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:617:in `each'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:617:in `process_client'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in `initialize'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in `new'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in `initialize'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in `new'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:271:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:270:in `each'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:270:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/bin/mongrel_rails:127:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/command.rb:211:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/bin/mongrel_rails:243
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/servers/mongrel.rb:64
    E:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
    E:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39
    E:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
    E:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
    script/server:3

    app/models/cart_item.rb:16:in `increment_quantity'
    app/models/cart.rb:11:in `add_produit'
    app/controllers/store_controller.rb:20:in `add_to_cart'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1158:in `send'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:1158:in `perform_action_without_filters'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:697:in `call_filters'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:689:in `perform_action_without_benchmark'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
    E:/InstantRails/ruby/lib/ruby/1.8/benchmark.rb:293:in `measure'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/rescue.rb:199:in `perform_action_without_caching'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:678:in `perform_action'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:33:in `cache'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/query_cache.rb:8:in `cache'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/caching.rb:677:in `perform_action'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `send'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:524:in `process_without_filters'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/filters.rb:685:in `process_without_session_management_support'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/session_management.rb:123:in `process'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/base.rb:388:in `process'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:171:in `handle_request'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:115:in `dispatch'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:126:in `dispatch_cgi'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/actionpack-2.0.2/lib/action_controller/dispatcher.rb:9:in `dispatch'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/rails.rb:78:in `process'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/rails.rb:76:in `synchronize'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/rails.rb:76:in `process'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:618:in `process_client'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:617:in `each'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:617:in `process_client'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in `initialize'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in `new'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:736:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in `initialize'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in `new'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel.rb:720:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:271:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:270:in `each'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/configurator.rb:270:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/bin/mongrel_rails:127:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/lib/mongrel/command.rb:211:in `run'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.0.1-mswin32/bin/mongrel_rails:243
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:489:in `load'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/servers/mongrel.rb:64
    E:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
    E:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:496:in `require'
    E:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/commands/server.rb:39
    E:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
    E:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
    script/server:3

    Request

    Parameters:

    {"commit"=>"Ajouter à l'offre",
    "authenticity_token"=>"dab289d1fc17fafa143e170d3693cf083910870d",
    "id"=>"2",
    "arg1"=>"12"}

    Show session dump


    quantity: 1
    flash: !map:ActionController::Flash::FlashHash {}


    Response

    Headers:

    {"cookie"=>[],
    "Cache-Control"=>"no-cache"}
    En espérant que vous puissiez m'expliquer le probleme ...

  7. #7
    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
    pour récupérer la valeur de ton text_field_tag dans ton controlleur, il te suffit de faire un :


  8. #8
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Pour compléter le post précédent, voici le code de la fonction problématique (qui se trouve dans le modele cart_item.rb, élément du modele cart.rb)

    ex: les ... sont, je suppose, censé être complété, mais par quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      def increment_quantity ...
        @quantity += ....
      end
    je voudrais que cette fonction recupere en argument le contenu du champ pour que cette valeur soit ajoutée a ma quantité.

    Suis assez clair dans mes explications ?

  9. #9
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Ok,

    params[:arg1] me permet de recupérer le contenu du champ.
    Comment puis-je ensuite recupérer cette valeur afin de la placer en argument dans une fonction de mon modele et enfin de l'afficher dans la vue ?
    Car c'est là que se pose mon probleme en fait

    dans mon controller, j'ai placé cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def recup_value
        @var = params[:arg1]
    end
    si je précise cette action dans le submit_tag, je suppose que var contient le contenu du champ ?

    Mais par quelle magie récupérer cette valeur dans mon modele ?

  10. #10
    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
    D'accord, je cerne un peu mieux le problème

    L'idée, c'est que une telle méthode dans le modèle ne peux pas être appelée directement à partir d'un formulaire.

    Ce qu'il va falloir faire :

    Dans ta vue, tu as ton formulaire avec un champs texte pour la quantité, et un champs caché qui contiens l'id de ton objet

    Dans l'action de ton controlleur appellée lors du submit, tu vas récupérer ton objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mon_objet = Modele.find params[:id_objet]
    Ensuite,tu vas appeler la méthode du modèle sur cet objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_objet.increment_qty_by(params[:nom_var_contenant_la_valeur_de_ton_champs_texte].to_i
    Et ta méthode dans ton modèle vas donc être définir comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def increment_qty_by(quantity_to_add)
       current_quantity = quantity # Si le champs de ton modèle s'appelle quantity, à adapter sinon
       new_quantity = current_quantity + quantity_to_add
     
       update_attribute(:quantity, new_quantity)
    end

  11. #11
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Merci pour ta réaction rapide.

    En te relisant, je me dis que l'explication que tu me donnes concerne le cas, ou je dois indiquer une quantité dans une DB existante ...
    En fait, je dispose d'une DB de produits, d'une classe offre et d'une class detail_offre ...
    Dans offre, je crée un tableau que je rempli avec différents produits(le detail de l'offre).
    lorsque j'affiche la liste des produits à partir de ma DB, un champ 'qty' me permet d'indiquer la quantité de ce produit que je veux ajouter à mon offre via le submit_tag.
    La quantité est donc ici une précision par rapport au nombre de produits commandés.
    Ce qui n'a rien à voir, à mon sens, avec le modèle produit ... (mais je peux me tromper)
    En sachant cela, est ce que ce que tu m'expliques est toujours d'application ?

    Merci d'avance pour ton aide

  12. #12
    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
    je ne comprends pas bien...
    Pour affecter une valeur à un champs d'un objet ActiveRecord, le update_attribute fonctionne, qu'il soit utilisé directement dans un controlleur ou dans le modèle...

  13. #13
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Je vais essayer d'être plus clair.

    la quantité, je veux pouvoir l'utiliser uniquement pour faire un calcul sur le prix du produit.
    Je n'ai pas besoin de la stocker dans une DB en fait.

    Au niveau des fichiers, j'ai un modèle produit généré automatiquement par rails (avec scaffold etc.), + un modèle cart (l'offre) + un modèle cart_item (le detail de l'offre)

    Au niveau des controllers, j'ai un controleur produit et un controleur store

    Les deux derniers modèles ne sont pas reliés à un DB, j'ai juste créé 2 modèles.
    Dans le modèle cart, je crée un tableau de items, une fonction qui rempli ce tableau avec des items et une fonction qui calcul le montant total en fonction des items contenu dans l'offre.

    Dans le modèle cart_items, une fonction prix qui calcule le prix en fonction de la quantité, une fonction increment_quantity, une fonction initialize

    => je recupere la valeur du champ texte à partir du controleur store et je voudrait l'utiliser dans une des fonctions du modele cart ou cart_item ... avant d'afficher tout cela dans la vue ...

  14. #14
    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
    alors reprends l'exemple que le t'avais donné ci-dessus, où je récupérais la valeur d'un formulaire danc un controlleur, avant de la transmettre à une méthode de mon modèle...

  15. #15
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    Ok, je vais essayer tout ce que je peux avant de mettre un gros coup de boule dans le PC ...

    je posterai le code correct des que je serai parvenu à un résultat.

    en tout les cas un grand

  16. #16
    Membre habitué Avatar de horkets
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    326
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 326
    Points : 138
    Points
    138
    Par défaut
    pour récupérer la valeur de ton text_field_tag dans ton controlleur, il te suffit de faire un :

    Code :

    params[:arg1]
    En effet ... je tentais en fait de récupérer la valeur du champ dans une méthode qui n'étais pas appelée par l'action du bouton

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

Discussions similaires

  1. recuprer le contenu d'une classe dans une ennumeration
    Par RBOUKACEM dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/02/2007, 10h28
  2. Recupérer le contenu d'un champ de tableau d'une page web connue
    Par faiglon dans le forum Général Conception Web
    Réponses: 7
    Dernier message: 09/01/2007, 10h31
  3. Réponses: 8
    Dernier message: 09/01/2007, 10h29
  4. Recupérer le contenu d'une comboBox
    Par M1000 dans le forum Flash
    Réponses: 1
    Dernier message: 17/05/2006, 10h41
  5. recupération du contenu d"une liste deroulante
    Par moonia dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/04/2006, 14h20

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