0

ローリファイジェムでモデルロールを作りました。しかし、コントローラは名前空間 :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

ロールを更新したいときは、フォームを開いて編集し、送信をクリックしてエラーを取得します。

ルーティング エラー
[PATCH] "/admin/roles.4" に一致するルートはありません

私を助けてください。

4

2 に答える 2

2

url上で貼り付けたフォーム コードに基づいて、更新ではなく作成に使用されるパスを指していることがわかります。

simple_form次のように呼び出しを更新できるはずです。

= simple_form_for [:admin, @role], :html => { :class => 'form-horizontal' } do |f|

POSTシンボル化された名前空間名とオブジェクト インスタンスを含む配列を渡すことができ、 s とPATCHesの両方の URL が正しく構築されることがわかります。

于 2013-07-01T10:36:47.380 に答える
0

問題は解決しました。

_form で URL を修正します。

= simple_form_for @role, url: admin_role_path(@role), :html => { :class => 'form-horizo​​ntal' } do |f|
于 2013-07-01T18:38:45.850 に答える