2017-08-30 10 views
1

管理者権限でユーザーを作成しようとしましたが、実行しないでください。他のコントローラとビューでユーザーを作成する(Devilsを使用したRails 4)

私は工夫と私のルート#ホームへのログインにapplication_helperを使用しますが、それはユーザー

アプリ/ヘルパー/ application_helper.rb作成するときに私に多くの問題を引き起こしているものであれば、私は知らない

module ApplicationHelper 

    def resource_name 
    :user 
    end 
    def resource_name_request 
    :request 
    end 

def resource 
    @resource ||= User.new 
end 

def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
end 

end 

アプリ/コントローラ/ application_controller.rb:Aplicationコントローラー

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 



    def after_sign_in_path_for(resource) 
    session[:previous_url] || 
    if current_user.role == "admin" 
     admin_index_path 
    end 

    end 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :role]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:name, :country]) 
    end 
end 

アプリ/モデル/ user.rb:ユーザーモデル

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 

アプリ/コントローラ/ admin_controller.rb:Admin_controller

class AdminController < ApplicationController 
     before_action :authenticate_user! 


    def index 

    @user = User.new 
    end 


    def create 
    request_hash = { 
     :name => params[:name], 
     :email => params[:email], 
     :role => params[:role], 
     :password => params[:password], 
     :password_confirmation => params[:password_confirmation] 
    } 
    @user = User.new(request_hash) 
    @user.save 
    end 
end 

アプリ/ビュー/管理/ index.html.erb:私は今の作成に使用するビュー(私の問題の現在のソース)

  <%= form_for @user, as: resource_name do |f| %> 
       <%= devise_error_messages! %> 
       <div class="field"> 
       <%= f.label :name %><br /> 
       <%= f.text_field :name %> 
       </div> 

       <div class="field"> 
       <%= f.label :email %><br /> 
       <%= f.email_field :email, autofocus: true %> 
       </div> 

       <div class="field"> 
       <%= f.label :password %> 
       <% if @minimum_password_length %> 
       <em>(<%= @minimum_password_length %> characters minimum)</em> 
       <% end %><br /> 
       <%= f.password_field :password, autocomplete: "off" %> 
       </div> 

       <div class="field"> 
       <%= f.label :password_confirmation %><br /> 
       <%= f.password_field :password_confirmation, autocomplete: "off" %> 
       </div> 

       <div class="field"> 

        <%= f.select(:role) do %> 
        <% [['Admin', "admin"], ['User', "user"]].each do |c| -%> 
         <%= content_tag(:option, c.first, value: c.last) %> 
        <% end %> 
        <% end %> 
       </div> 

       <div class="actions"> 
        <%= f.submit "Sign up" %> 
       </div> 
       <% end %> 

のconfig/routes.rbを:ルート

Rails.application.routes.draw do 

    resources :admin 
    resources :accesses 
    devise_for :users, controllers: { 
     registrations: 'users/registrations' 
     } 

    root 'welcome#index' 

ERROR:これは私の現在のエラーです:

enter image description here

誰かがそれを行うには良い方法や、私を助けるためにリンクを持っている場合 - 私は最近ので、任意の読み取りが良いでしょうレールを学んでいます。その対応安らか経路に(ここではすなわち、@user)デフォルト、form_forにより

答えて

0

undefined method users_path

モデルインスタンスと共に使用される経路(すなわち、users_pathここ)。

、あなたもあなたを変更する必要があり、私はあなたがadmin#createにマップしようとしていることがわかりますので、あなたが明示的にそのことでとても

<%= form_for @user, as: resource_name, url: admin_index_path do |f| %> 

ようform_for内のURLへのパスを言及する必要がありますActionView ::テンプレート::エラー(経路一致{NO:アクション=たとえばparams[:name]このエラーを生成今応答しかしためparams[:user][:name]

+0

おかげに変更しなければならないのでのparamsとしてadmin#createparamsは、userハッシュ内部あろう> "show"、:controlle r => "admin"}必要なキーがありません:[:id]): –

+0

https://framapic.org/2NnnEJ7s3Zsc/JLJMtRlCUkN3.jpg –

+0

@ jleoお詫び申し上げますのは 'admin_index_path'です。私の答えを更新しました – Pavan

関連する問題