2011-08-10 2 views
1

Je cherche à permettre à un utilisateur de mettre à jour via la page show du modèle des attributs d'un modèle, puis soumettre, pour afficher les attributs mis à jour. :startdate et :enddate sont dans ma liste attr_accesible pour le modèle cart.rb. Basé sur le journal, il semble qu'il prend la date de fin et la date de début, mais ne le configure pas. Des pensées? Merci beaucoup.Mise à jour des attributs A travers Afficher la page

carts_controller.rb

def show 
    @cart = Cart.find(params[:id]) 
end 

def update 
@cart = Cart.find(params[:id]) 
respond_to do |format| 
    if @cart.update_attributes(params[:cart]) 
     format.html { redirect_to(@cart, :notice => 'Dates Set.') } 
     format.xml { head :ok } 
    end 
    end 
end 

chariots/show.html.erb

<%= form_for @cart do %> 
     From <%= text_field_tag :startdate %> </br> 
     To <%= text_field_tag :enddate %> 
     <%= submit_tag "Set Dates", :method => :put %> 
    <% end %> 

    Rental Dates: <%= @cart.startdate %> <%= @cart.enddate %> 

development.log

Started POST "/carts/42" for 127.0.0.1 at 2011-08-10 14:27:10 -0400 
DEPRECATION WARNING: Setting filter_parameter_logging in ActionController 
is deprecated and has no longer effect, please set 'config.filter_parameters' 
in config/application.rb instead. (called from <class:ApplicationController> at 
/Users/willdennis/rails_projects/spinlister/app/controllers/application_controller.rb:8) 
Processing by CartsController#update as HTML 
Parameters: {"utf8"=>"✓", 
"authenticity_token"=>"2RC9jfvbdUWtlT3OWnVd1OhW7WigUPYVoS5Quuwv2hQ=", 
"startdate"=>"08/10/2011", "enddate"=>"08/18/2011", "commit"=>"Set Dates", "id"=>"42"} 
[1m[35mCart Load (1.1ms)[0m SELECT "carts".* FROM "carts" WHERE ("carts"."id" = 42) 
LIMIT 1 Redirected to http://localhost:3000/carts/42 Completed 302 Found in 82ms 


    Started GET "/carts/42" for 127.0.0.1 at 2011-08-10 14:27:10 -0400 
    DEPRECATION WARNING: Setting filter_parameter_logging in ActionController is  
    deprecated and has no longer effect, please set 'config.filter_parameters' in 
    config/application.rb instead. (called from <class:ApplicationController> at 
/Users/willdennis/rails_projects/spinlister/app/controllers/application_controller.rb:8) 
    Processing by CartsController#show as HTML 
    Parameters: {"id"=>"42"} 
    [1m[36mCart Load (1.3ms)[0m [1mSELECT "carts".* FROM "carts" WHERE ("carts"."id" = 42) LIMIT 1[0m 
    [1m[35mLineItem Load (0.4ms)[0m SELECT "line_items".* FROM "line_items" WHERE ("line_items".cart_id = 42) 
    [1m[36mBike Load (1.6ms)[0m [1mSELECT "bikes".* FROM "bikes" WHERE ("bikes"."id" = 86) ORDER BY bikes.created_at DESC LIMIT 1[0m 

/mises en page Rendus _stylesheets.html.erb (1.5ms) [1m [35mUser charge (2,4ms) [SELECT "utilisateurs 0m". * FROM "utilisateurs" OU ("utilisateurs". "Id =" 1) LIMIT 1 Rendu des mises en page/_header.html.erb (116.3ms) Rendu des mises en page/_footer.html.erb (1.3ms) Rendu des chariots/show.html.erb dans les mises en page/applications (398.2ms) Terminé 200 OK en 431ms (Vues) : 399.6ms | ActiveRecord: 6.7ms)

Started GET "/stylesheets/application.css" for 127.0.0.1 at 2011-08-10 14:27:11 -0400 

    ActionController::RoutingError (No route matches "/stylesheets/application.css"): 


    Rendered /Users/willdennis/.rvm/gems/[email protected]/gems/actionpack- 3.0.1/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.3ms) 

Répondre

3

Le problème est que vous ne l'utilisez form_for correctement. Voici comment le formulaire doit être généré:

<%= form_for @cart do |f| %> 
    From <%= f.text_field :startdate %> <br> 
    To <%= f.text_field :enddate %> 
    <%= f.submit "Set Dates" %> 
<% end %> 
+0

vous n'avez pas besoin d'utiliser ': method' ici – fl00r

+0

Merci beaucoup. Cela met à jour la page bien. Savez-vous comment je pourrais préserver la liste déroulante du calendrier jQuery (qui a été déclenchée par le 'text_field_tag' je crois)? –

+0

L'élément semble toujours le même, il a juste un ID différent. Ajustez simplement le sélecteur jQuery et cela devrait fonctionner. –

Questions connexes