管理者権限でユーザーを作成しようとしましたが、実行しないでください。他のコントローラとビューでユーザーを作成する(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:これは私の現在のエラーです:
誰かがそれを行うには良い方法や、私を助けるためにリンクを持っている場合 - 私は最近ので、任意の読み取りが良いでしょうレールを学んでいます。その対応安らか経路に(ここではすなわち、@user
)デフォルト、form_for
により
おかげに変更しなければならないのでのparamsとして
admin#create
にparams
は、user
ハッシュ内部あろう> "show"、:controlle r => "admin"}必要なキーがありません:[:id]): –https://framapic.org/2NnnEJ7s3Zsc/JLJMtRlCUkN3.jpg –
@ jleoお詫び申し上げますのは 'admin_index_path'です。私の答えを更新しました – Pavan