これが私のusers/edit.html/erbにあるものです
<%= form_for(resource, :as => resource_name, :url => user_path(resource_name), :html => { :method => :put }) do |f| %>
ユーザーの私のルート:
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
method => puts なので、ルート情報を使用して、HTML アクションが /users/:id になることを期待しています
これは users/edit.html.erb で、from id の HTML は edit_user_id であり、class は edit_user であると予想しています。
フォームが表示されたときに、実際にHTMLで(firebugを使用して)取得しているものは次のとおりです。
<form id="new_user" class="new_user" method="post" action="/users/user" accept-charset="UTF-8">
HTML は次のようになっているべきではありません (ユーザー ID が 1 であると仮定):
<form id="edit_user_1" class="edit_user" method="post" action="/users/1" accept-charset="UTF-8">
私の routes.rb ファイルには、次のものがあります。
resources :users, only: [:show, :edit, :update]
devise_for :users, :controllers => { :registrations => 'registrations', :confirmations => 'confirmations' }, :path => '', :path_names => { :sign_in => "login", :sign_up => "request_invite" }
編集 - Viktor のコメントへの応答:
ユーザー ヘルプを次のように変更しました。
def resource
@resource ||= User.find(params[:id])
end
したがって、API ドキュメントによると、これはアクションとして /users/:id も取得する必要があるため、HTML は次のようになります。
<form id="edit_user_1" class="edit_user" method="post" action="/users/1" accept-charset="UTF-8">
代わりに、次のとおりです。
<form id="edit_user" class="edit_user" method="post" action="/users/user" accept-charset="UTF-8">
そのため、ユーザー コントローラーが動作を開始すると、次のコードがヒットします。
def update
@user = User.find(params[:id])
そして、(フォームのアクションから)渡すIDはユーザーという単語であると考えているため、更新をクリックすると次のエラーメッセージが表示されると予想されます。
ID=user のユーザーが見つかりませんでした
それがまさに私がエラーとして得ているものです。追加の洞察はありますか?
最終的な答え:
users_helper.rb では:
def resource
@resource ||= User.find(params[:id])
end
および users/edit.html.erb で
resource_name, :html => { :method => :put }) do |f| %>