0

views/users/index.html.erb私は持っています:

<% @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`

updateおよびeditアクションは次の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

私のためにこの問題を見てくれてありがとう、最近たくさん出てきています。

4

4 に答える 4

0

Devise 登録コントローラーではなく、Users#edit にルーティングする edit_user_path を使用する必要があるという Nick の指摘は正しいです。

表示されるエラー メッセージは、edit_user_path ヘルパーに必要な id パラメータがないことを示しています。これは、@users 内のユーザーの 1 人が保存されていない (その ID が nil である) ことを意味している可能性が非常に高いです。デバッグするには、ビューで次のようなものを試してください。

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

おそらく、値の 1 つが空白であることがわかります。

于 2013-05-02T18:51:42.573 に答える
0

routes.rb では、次の 2 行を間違った順序で配置している可能性があります。

#routes.rb resources :users devise_for :users

mysite/users/edit の呼び出しは、id 'edit' を持つユーザー コントローラーにルーティングされます。

そのはず : #routes.rb devise_for :users resources :users

于 2016-02-18T05:04:11.137 に答える
0

はい、ニックは正しいです。ユーザーのプロファイルを編集する場合、 user は必要ありませんedit_user_registration_path(user)このパスは、おそらくDeviseを使用して新しいユーザーを作成するときに使用されます。

ここでは、ユーザーを更新するために、URL とともに ID を渡す必要があります。こんなものでしょう

edit_user_path(@user.id)

また

{:controller=> 'user', :action => 'edit', :id => @user.id}
于 2013-05-04T07:33:26.407 に答える