2013-05-02 182 views
0

views/users/index.html.erb我:導軌 - 更新用戶返回`找不到用戶使用id = edit`

<% @users.each do |user| %> 
    <% if user.teacher == current_user.teacher || current_user.role == "admin" %> 
    <tr> 
    <td><%= user.username %></td> 
    <td><%= user.email %></td> 
    <td><%= user.teacher %></td> 
    <td><%= user.role %></td> 
    <td><%= user.admin %></td> 
    <td><%= link_to 'Problems', student_problems_path(user_email: user.email) %></td> 
    <td><%= link_to 'Edit', edit_user_registration_path(user) %></td> 
    <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
    <% end %> 
<% end %> 
</table> 

當你點擊Edit,你鏈接到views/users/edit.html.erb,它看起來像這樣:

<h2>Edit <%= resource_name.to_s.humanize %></h2> 

<%= form_for(resource, :as => resource_name, :url => user_registration_path(resource_name), :html => { :method => :put }) do |f| %> 
    <%= devise_error_messages! %> 

    <div><%= f.label :email %><br /> 
    <%= f.email_field :email, :autofocus => true %></div> 

    <div><%= f.label :teacher %><br /> 
    <%= f.text_field :teacher, :autofocus => true %></div> 

    <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> 
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div> 
    <% end %> 

    <div><%= f.submit "Update" %></div> 
<% end %> 

的問題是,當我點擊Update和實際嘗試更新模型,我得到

Couldn't find User with id=edit 
in app/controllers/users_controller.rb:51:in `update` 

這裏是updateedit行動在UsersController

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

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
end 

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

    redirect_to(user_path) 
end 

而且,如果有幫助,這裏是我的路線:

    root  /       problems#new 
     feedback_index POST /feedback(.:format)   feedback#create 
      new_feedback GET /feedback/new(.:format)  feedback#new 
     new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
     user_password POST /users/password(.:format)  devise/passwords#create 
    new_user_password GET /users/password/new(.:format) devise/passwords#new 
    edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PUT /users/password(.:format)  devise/passwords#update 
edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
    user_registration PUT /users(.:format)    devise/registrations#update 
       users GET /users(.:format)    users#index 
         POST /users(.:format)    users#create 
       new_user GET /users/new(.:format)   users#new 
      edit_user GET /users/:id/edit(.:format)  users#edit 
        user GET /users/:id(.:format)   users#show 
         PUT /users/:id(.:format)   users#update 
         DELETE /users/:id(.:format)   users#destroy 
       problems GET /problems(.:format)   problems#index 
         POST /problems(.:format)   problems#create 
      new_problem GET /problems/new(.:format)  problems#new 
      edit_problem GET /problems/:id/edit(.:format) problems#edit 
       problem GET /problems/:id(.:format)  problems#show 
         PUT /problems/:id(.:format)  problems#update 
         DELETE /problems/:id(.:format)  problems#destroy 
      help_about GET /help/about(.:format)   help#about 
      problems_new GET /problems/new(.:format)  problems#new 
        data  /data(.:format)    problems#data 
     student_problems  /student_problems(.:format) users#student_problems 

感謝的人,看起來這個問題對我來說,近來已經出現了很多。

回答

1

你說錯了路徑。在你看來變化

edit_user_registration_path(user) 

edit_user_path(user) 
+0

我一直在嘗試,但是當我做出這種改變時,我得到了'無路由匹配{:action =>「edit」,:controller =>「users」}'。我確實在我的控制器中有。我發佈它。 – Houdini 2013-05-02 08:04:55

+0

你可以發佈你的實際routes.rb文件。 – 2013-05-02 18:27:11

0

尼克是正確的,你需要使用edit_user_path,你給用戶#編輯的路線,而不是在設計註冊控制器。

您收到的錯誤消息表明edit_user_path幫助程序中所需的id參數缺失,這很可能意味着@users中的某個用戶未保存(其ID爲零)。要在您的視圖中進行調試嘗試,請執行以下操作:

<% @users.each do |user| %> 
    USER ID = <%= user.id %> 
<% end %> 

您可能會發現其中一個值爲空。

0

是的尼克是對的。爲了編輯用戶的簡檔,不需要用戶edit_user_registration_path(user)。 當您在Devise的幫助下創建新用戶時,可能會使用此路徑。

在這裏,你必須確保你傳遞一個id與你的網址來更新用戶。這將是這樣的

edit_user_path(@user.id) 

{:controller=> 'user', :action => 'edit', :id => @user.id} 
0

在routes.rb中你可能放錯順序這兩條線:

#routes.rb resources :users devise_for :users

然後調用mysite的/用戶/編輯將被路由到ID爲'編輯'的用戶控制器

它應該是: #routes.rb devise_for :users resources :users