0
我已經添加了gem「devise」 。我不明白我的代碼有什麼問題。提前致謝!沒有路線匹配{:action =>「change_name」,:controller =>「users」,:id => nil}缺少必需的鍵:[:id]
錯誤:
def user_form
common_options = { validate: true, html: { class: 'user-form' } }
form_options = current_user ? [ current_user, { url: change_user_name_path(current_user.id), method: :post, validate: true }.merge(common_options) ] : [ User.new, { validate: true }.merge(common_options) ]
form_for *form_options do |f|
yield f
end
end
路線
Rails.application.routes.draw do
devise_for :users
devise_for :usernames
root 'surveys#index'
resources 'surveys'
resources 'attempts'
resources 'users', only: [:create]
delete 'attempts/:survey_id/:user_id' => 'attempts#delete_user_attempts', as: :delete_user_attempts
post 'user/:id/change_name' => 'users#change_name', as: :change_user_name
控制器:
class UsersController < ApplicationController
def create
session[:user_id] = User.create(user_params).id
redirect_to :back
end
def change_name
@user = User.find(params[:id])
@user.update(user_params)
redirect_to :back
end
def user_params
params.require(:user).permit(:name)
end
end
有人能幫助這問題?
你什麼時候得到這個錯誤?你打過什麼網址?你可能調用了change_name動作而沒有通過ID – Sajin
@Sajin'form_options = current_user? [current_user,{url:change_user_name_path(current_user.id),method :: post,validate:true} .merge(common_options)]' –
您需要傳遞'current_user'而不是'current_user.id'。你有當前用戶的數據嗎? – Vishal