开发者

Rails 3 form uses "edit" instead of "update" when the form is submitted

开发者 https://www.devze.com 2023-04-04 18:34 出处:网络
I have a problem with my form in Rails 3. The forms work if I create something, but if I try to update som开发者_如何学JAVAething, they fail. In this exmaple I tried to update the user settings, like

I have a problem with my form in Rails 3. The forms work if I create something, but if I try to update som开发者_如何学JAVAething, they fail. In this exmaple I tried to update the user settings, like name, mail etc. Here are the relevant code snippets:

Edit and Update from User_Controller.rb

  def edit
    @title = "Nutzerverwaltung"
  end

  def update
    @user = User.find(params[:id])

    if @user.update_attributes(params[:user])
      flash[:success] = "Profil aktualisiert"
      redirect_to @user
    else
      @title = "Edit"
      render 'edit'
    end
  end

Then, there is the form:

%form.user_edit
  = form_for @user, :url => {:controller => "users", :action => "update"}, :html => { :method => :put } do |f|
    = render 'shared/error_messages', :object => f.object
    = render 'fields', :f => f
    .actions
      = f.submit "Update"

My terminal output when running the local WEBrick Server (some of the form labels have german names):

Started GET "/users/2/edit?utf8=%E2%9C%93&_method=put&authenticity_token=R5LfeIAjpJOpH%2B0yMD8PLO24%2Fgcct0CCqXuzoLoVibs%3D&user%5Banrede%5D=&user%5Bname%5D=Johnny&user%5Bemail%5D=t.schneider%40mail.com&user%5Bpassword%5D=&user%5Bpassword_confirmation%5D=&user%5Bplz%5D=&user%5Bort%5D=&user%5Bstrasse%5D=&commit=Update" for 127.0.0.1 at 2011-09-13 15:53:24 +0200
  Processing by UsersController#edit as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"R5LfeIAjpJOpH+0yMD8PLO24/gcct0CCqXuzoLoVibs=", "user"=>{"anrede"=>"", "name"=>"TESTer", "email"=>"t.schneider@mail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "plz"=>"", "ort"=>"", "strasse"=>""}, "commit"=>"Update", "id"=>"2"}
  User Load (1.2ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1
Rendered shared/_error_messages.html.haml (2.2ms)
Rendered users/_fields.html.haml (7.5ms)
Rendered layouts/_stylesheets.html.haml (2.4ms)
Rendered layouts/_header.html.haml (3.9ms)
Rendered layouts/_footer.html.haml (2.0ms)
Rendered users/edit.html.haml within layouts/application (33.2ms)
Completed 200 OK in 118ms (Views: 36.7ms | ActiveRecord: 1.2ms)

And then there is my rake routes, which seems ok for me:

       users GET    /users(.:format)          {:action=>"index", :controller=>"users"}
       users POST   /users(.:format)          {:action=>"create", :controller=>"users"}
    new_user GET    /users/new(.:format)      {:action=>"new", :controller=>"users"}
   edit_user GET    /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
        user GET    /users/:id(.:format)      {:action=>"show", :controller=>"users"}
        user PUT    /users/:id(.:format)      {:action=>"update", :controller=>"users"}
        user DELETE /users/:id(.:format)      {:action=>"destroy", :controller=>"users"}
    sessions POST   /sessions(.:format)       {:action=>"create", :controller=>"sessions"}
 new_session GET    /sessions/new(.:format)   {:action=>"new", :controller=>"sessions"}
     session DELETE /sessions/:id(.:format)   {:action=>"destroy", :controller=>"sessions"}
       posts POST   /posts(.:format)          {:action=>"create", :controller=>"posts"}
   edit_post GET    /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"}
        post DELETE /posts/:id(.:format)      {:action=>"destroy", :controller=>"posts"}
        root        /(.:format)               {:controller=>"pages", :action=>"start"}
                    /(.:format)               {:controller=>"pages", :action=>"start"}
       start        /start(.:format)          {:controller=>"pages", :action=>"start"}
     kontakt        /kontakt(.:format)        {:controller=>"pages", :action=>"kontakt"}
    tagebuch        /tagebuch(.:format)       {:controller=>"pages", :action=>"tagebuch"}
 hinzufuegen        /hinzufuegen(.:format)    {:controller=>"pages", :action=>"hinzufuegen"}
   bluefocus        /bluefocus(.:format)      {:controller=>"pages", :action=>"bluefocus"}
    seminare        /seminare(.:format)       {:controller=>"pages", :action=>"seminare"}
    angebote        /angebote(.:format)       {:controller=>"pages", :action=>"angebote"}
    specials        /specials(.:format)       {:controller=>"pages", :action=>"specials"}
        shop        /shop(.:format)           {:controller=>"pages", :action=>"shop"}
registrieren        /registrieren(.:format)   {:controller=>"users", :action=>"registrieren"}
       login        /login(.:format)          {:controller=>"sessions", :action=>"login"}
      logout        /logout(.:format)         {:controller=>"sessions", :action=>"destroy"}
                    /posts/:id/edit(.:format) {:controller=>"posts", :action=>"edit"}

I know that this function of editing was working once, but i don't know what changed, so that it doesn't work anymore.

If you need anymore information just say a word.

Every help is welcome. Thanks!


You have a %form.user_edit tag in your HAML, immediately before form_for which generates a form tag. Since you are not specifying the url to submit the form to (in the form tag you manually create), it is probably posting by default to the current url (presumably, your user edit route).

Try removing the %form.user_edit and adding :html => {:class => 'user_edit', :method => :put} to your form_for call.


It looks like update_attributes is returning False and causing your edit action to be rendered. What attr_accessible attributes exist on your user model?

Also: What validations exist?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号