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