Edit routing form - when updating submit launches the #show method instead of #update

I have a vanity app, and I'm struggling to update attributes. The editing form loads correctly, but after submitting the form, instead of starting the update method, the rails are redirected to root. It is not clear why this is happening ....

# users_controller
  def edit 
    @user = User.find(params[:id]) 
  end

  def to_param  # overridden
     username.parameterize
  end

  def update 
      @user = User.find(params[:id]) 
      if @user.update_attributes(params[:user]) 
         redirect_to user_url(current_user.username), :flash => { :success => "success" }
      else
        redirect_to user_url(current_user.username), :error => { :error => "shit" }
      end
   end

routes

resources :users do
     resources :friends
   end

  match '/:username' => 'users#show', :as => "user"

The form

<%= form_for @user do |form| %>  
<%= render 'shared/error_messages', :object => form.object %>
 <div class="form">  
    <p> <%= form.label :description, "Message to friends" %>  <br />  
     <%= form.text_area :description %> </p> 

     <%= form.submit %>  
 </div>  
 <% end %>

dev log

Started GET "/users/1/edit" for 127.0.0.1 at Wed Jan 05 19:07:28 -0500 2011
  Processing by UsersController#edit as HTML
  Parameters: {"id"=>"1"}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
Rendered shared/_error_messages.html.erb (0.6ms)
ApplicationController::current_user
ApplicationController::current_user_session
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
  CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
ApplicationController::current_user_session
ApplicationController::current_user
ApplicationController::current_user
Rendered users/edit.html.erb within layouts/application (27.6ms)
Completed 200 OK in 53ms (Views: 38.7ms | ActiveRecord: 0.3ms)


    Started POST "/1" for 127.0.0.1 at Wed Jan 05 19:08:06 -0500 2011
      Processing by UsersController#show as HTML
      Parameters: {"commit"=>"Update User", "authenticity_token"=>"OM1lIzizuFCYlxC3XmtmG/btqAsyjekHtqsiwlUDn3M=", "utf8"=>"✓", "username"=>"1", "user"=>{"description"=>"Hello people! Give me your address. Get a postcard."}}
      User Load (0.2ms)  SELECT "users".* FROM "users" WHERE ("users"."username" = '1') LIMIT 1
    Redirected to http://0.0.0.0:3000/
    ApplicationController::current_user
    ApplicationController::current_user_session
      User Load (0.3ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
      CACHE (0.0ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 1) LIMIT 1
    ApplicationController::current_user_session
    Completed 302 Found in 102ms

relevant rake routes:

 users GET    /users(.:format)                             {:controller=>"users", :action=>"index"}
                                 POST   /users(.:format)                             {:controller=>"users", :action=>"create"}
                        new_user GET    /users/new(.:format)                         {:controller=>"users", :action=>"new"}
                       edit_user GET    /users/:id/edit(.:format)                    {:controller=>"users", :action=>"edit"}
                            user GET    /users/:id(.:format)                         {:controller=>"users", :action=>"show"}
                                 PUT    /users/:id(.:format)                         {:controller=>"users", :action=>"update"}
                                 DELETE /users/:id(.:format)                         {:controller=>"users", :action=>"destroy"}
+3
source share
3 answers

, , _method, "put". , form_for @user . , , , form_for helper:

:html => { :method => :put}
0

@Beerlington. . , , .

<%= form_for @user, :url => { :action => "update" } do |form| %> 

- ... , .

+2

HTML- . ,

action="/1"

, ,

match '/:username' => 'users#show', :as => "user"

Started POST "/1" for 127.0.0.1 at Wed Jan 05 19:08:06 -0500 2011
  Processing by UsersController#show as HTML

, form_for to_param . , .

+1
source

Source: https://habr.com/ru/post/1783792/


All Articles