我使用rolify gem制作了模型角色。 但控制器是命名空间:admin:
class Admin::RolesController < ApplicationController
def index
@roles = Role.all
end
def new
@role = Role.new
end
def create
@role = Role.new(role_params)
respond_to do |format|
if @role.save
format.html { redirect_to admin_role_path(@role), notice: 'Роль создана.' }
format.json { render action: 'show', status: :created, location: @role }
else
format.html { render action: 'new' }
format.json { render json: @role.errors, status: :unprocessable_entity }
end
end
end
def show
@role = Role.find(params[:id])
end
def edit
@role = Role.find(params[:id])
end
def update
respond_to do |format|
if @role.update(role_params)
format.html { redirect_to admin_role_path(@role), notice: 'Роль обновлена.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @role.errors, status: :unprocessable_entity }
end
end
end
def destroy
@role = Role.find(params[:id])
@role.destroy
respond_to do |format|
format.html { redirect_to admin_roles_url }
format.json { head :no_content }
end
end
private
def set_role
@role = Role.find(params[:id])
end
def role_params
params.require(:role).permit(:name)
end
end
当我想更新角色时,我打开表单,编辑,点击提交并收到错误:
Routing Error No route matches [PATCH] "/admin/roles.4"
请帮帮我。
答案 0 :(得分:2)
根据您在上面粘贴的表单代码,您会看到url
指向用于创建但不用于更新的路径。
您应该能够将您的电话更新为simple_form
,如下所示:
= simple_form_for [:admin, @role], :html => { :class => 'form-horizontal' } do |f|
您将看到可以传递带有符号化命名空间名称和对象实例的数组,并且它将为POST
和PATCH
es正确构建URL。
答案 1 :(得分:0)
问题解决了。
在_form中我修复了网址。
= simple_form_for @role, url: admin_role_path(@role), :html => { :class => 'form-horizontal' } do |f|