2012-11-10 6 views
0

J'ai une table utilisateurs (Devise), avec une colonne "admin" (booléen) pour qualifier mes utilisateurs. J'ai aussi un espace de noms "Backend". Je voudrais que mes utilisateurs admins puissent créer de nouveaux utilisateurs à partir de l'espace de noms back-end.créer un nouvel utilisateur d'un autre contrôleur non partenaire

Je créé un Backend::UsersController:

class Backend::UsersController < ApplicationController 
layout 'admin' 
before_filter :authenticate_user! 

def index 
@auteurs = User.all 

respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @auteurs } 
    end 
end 

def new 
@auteur = User.new 

    respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @auteur } 
    end 
end 

def create 
    @auteur = User.new(params[:auteur]) 

    respond_to do |format| 
    if @auteur.save 
     format.html { redirect_to @auteur, notice: 'Article was successfully created.' } 
     format.json { render json: @auteur, status: :created, location: @auteur } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @auteur.errors, status: :unprocessable_entity } 
    end 
    end 
end 
end 

est ici la partie "_form" appelé dans la "nouvelle" vue:

<%= simple_form_for(@auteur) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.input :email %> 
    </div> 

    <div class="form-actions"> 
    <%= f.button :submit %> 
    </div> 
<% end %> 

Un est ici mes itinéraires:

namespace :backend do 
    resources :articles 
    root to: "articles#index" 
    resources :accueil 
resources :users 

get "users/index" 


    get "users/create" 

    get "users/new" 
end 

    devise_for :users 

Mais quand j'essaye d'accéder à "backend/users/new", cela me conduit à cette erreur:

NoMethodError in Backend/users#new 

Showing C:/Ruby/acturevue/app/views/backend/users/_form.html.erb where line #1 raised: 

undefined method `users_path' for #<#<Class:0x39616b0>:0x416f6d0> 

Quelqu'un a-t-il une idée de la source du problème? Merci

MISE À JOUR

Alors, j'ai modifié mon code comme ça:

Dans Backend :: UsersController:

def new 
    @user = User.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @user} 
    end 
    end 

    def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
     if @user.save 
     format.html { redirect_to backend_users_path(@user), notice: 'Article was successfully created.' } 
     format.json { render json: @user, status: :created, location: @user } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

En _form:

<%= simple_form_for(@user) do |f| %> 

Mais J'ai toujours le e rror. Cependant, le backend_users_path existe dans les voies y:

  backend_users GET /backend/users(.:format)    backend/users# 
index 
         POST /backend/users(.:format)    backend/users# 
create 
    new_backend_user GET /backend/users/new(.:format)   backend/users# 
new 
    edit_backend_user GET /backend/users/:id/edit(.:format) backend/users# 
edit 
     backend_user GET /backend/users/:id(.:format)   backend/users# 
show 
         PUT /backend/users/:id(.:format)   backend/users# 
update 
         DELETE /backend/users/:id(.:format)   backend/users# 
destroy 

Répondre

0

Vous devez utiliser l'espace de noms dans votre redirect:

redirect_to [:backend, @auteur] #... 

Voir ma réponse à this question.

+0

Merci de vous soucier de mon problème, mais l'erreur est toujours là ... Je mettrai à jour mon post pour vous montrer les modifications que j'ai faites. –

+0

Merci Thilo, ça marche! J'ai modifié la _form partielle avec 'simpleform_fom_for ([: backend, @user])' et c'est bon. –

Questions connexes