私のRails 5アプリケーションで、作成した新しいアクションを使用してUserモデルを更新するフォームを作成しようとしています。Railsフォームが間違ったIDを渡す
しかし、私は404エラーに遭遇しています(しかし、現在の値がフォームに表示されているので、レコードがそこにあります)。私はそれがUser.idがフォームに正しく渡されていないためだと思うが、私は確信が持てない。
エラー: ActiveRecord::RecordNotFound (ActiveRecord::RecordNotFound)
Started PATCH "https://stackoverflow.com/users/submit_info" for ::1 at 2017-01-24 23:02:31 -0800
Processing by UsersController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "user"=>{"name"=>"Foo"}, "commit"=>"Submit Details", "id"=>"submit_info"}
User Load (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`slug` = 'submit_info' ORDER BY `users`.`id` ASC LIMIT 1
Completed 404 Not Found in 3ms (ActiveRecord: 0.0ms)
図
<%= simple_form_for @user, url: submit_info_users_path do |f| %>
<%= f.input :name %>
<%= f.button :submit %>
コントローラ
def submit_info
@user = User.friendly.find(current_user.id)
respond_to do |format|
if @user.save(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :info }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# I'm using the Friendly_ID gem
def set_user
@user = User.friendly.find(params[:id])
end
routes.rbを
devise_for :users, :controllers => { :registrations => "registrations", :omniauth_callbacks => "users/omniauth_callbacks" }
resources :users do
collection do
get 'info'
post 'submit_info'
end
end
'submit_info_users_path(@user)'のように、あなたはおそらくユーザを渡さなかったでしょう。 – Deep
私はそれを試しても同じ結果を得ます、あるいは 'submit_info_users_path(: id => @ user.id) ' – yellowreign
Aah申し訳ありませんが、' collection'ルートの 'submit_info'は、そのアクションを使ってユーザーを更新したいので' member'ルートにあるはずです。 – Deep