Я создаю приложение, и я решил использовать Devise и CanCanCan. Я установил приложение, чтобы только администратор или суперпользователь мог добавить нового пользователя.Rails 4 URLGeneration Ошибка
Мои пользователи созданы из модального файла, расположенного на странице application.html.erb.
Я могу создать нового пользователя без проблем, все работает. Однако теперь я пытаюсь установить, что пользователь может редактировать свой профиль, еще раз, из модального. Вот где я «нажимаю на стену».
This is the github repo for this project feel free to take a look if you want to.
Я прошел через код снова и снова, но безрезультатно!
No route matches {:action=>"update", :controller=>"admins"} missing required keys: [:id]
Перед тем, как прыгать на мне для не имеющих идентификатор установлен правильно, я использую SecureRandom.hex (6) строки тщеславия URL. они кажутся хорошими везде, кроме здесь.
ересирует маршруты рейка для Редактировать пользователя.
edit_user GET /admins/:id/edit(.:format) admins#edit
push_edit_user PATCH /admins/:id(.:format) admins#update
здесь пользовательские маршруты в routes.rb
as :user do
get "admins/new_user" => "admins#new_user", as: :admins_new_user
post "admins/create_user" => "admins#create_user", as: :admins_create_user
get "admins/:id/edit" => "admins#edit", as: :edit_user patch "admins/:id" => "admins#update", as: :push_user_edit
end
здесь мои пользователи (администратор) контроллер, где у меня есть создание и обновление действия.
class AdminsController < ApplicationController
before_action :authenticate_user!
def new_user
authorize! :manage, User
@user = User.new
end
def create_user
@user = User.find_by_user_ident(params[:user_id])
authorize! :manage, User
@user = User.new(sign_up_params)
if @user.save
format.html { redirect_to root_path, notice: 'User has been successfully created.' }
else
end
end
def edit
@user = User.find_by_user_ident(params[:user_id])
end
def update
@user = User.find_by_user_ident(params[:user_id])
if @user.update(account_update_params)
format.html { redirect_to @user, notice: 'Address was successfully updated.' }
else
end
end
private
def sign_up_params
params.require(:user).permit(:email, :password, :password_confirmation, :user_ident, :f_name, :m_name, :l_name, :dob, :role)
end
def account_update_params
params.require(:user).permit(:email, :password, :password_confirmation, :user_ident, :f_name, :m_name, :l_name, :dob, :role)
end
# Sets user to be found by User_Ident #
def set_user
@user = User.find_by_user_ident(params[:id])
end
# Allow Profile Update w/o Current p/w Confirmation
def update_resource(resource, params)
resource.update_without_password(params)
end
end
и только для того, чтобы быть в безопасности, вот полная ошибка стека ошибки.
ActionController::UrlGenerationError - No route matches {:action=>"update", :controller=>"admins"} missing required keys: [:id]:
actionpack (5.0.0.rc1) lib/action_dispatch/journey/formatter.rb:50:in `generate'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:629:in `generate'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:660:in `generate'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:707:in `url_for'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:236:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:177:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:295:in `block (2 levels) in define_url_helper'
app/views/layouts/application.html.erb:168:in `_app_views_layouts_application_html_erb__1028780063709367977_70323361979180'
actionview (5.0.0.rc1) lib/action_view/template.rb:158:in `block in render'
activesupport (5.0.0.rc1) lib/active_support/notifications.rb:166:in `instrument'
actionview (5.0.0.rc1) lib/action_view/template.rb:348:in `instrument'
actionview (5.0.0.rc1) lib/action_view/template.rb:156:in `render'
actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:66:in `render_with_layout'
actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:14:in `render'
actionview (5.0.0.rc1) lib/action_view/renderer/renderer.rb:42:in `render_template'
actionview (5.0.0.rc1) lib/action_view/renderer/renderer.rb:23:in `render'
actionview (5.0.0.rc1) lib/action_view/rendering.rb:103:in `_render_template'
actionpack (5.0.0.rc1) lib/action_controller/metal/streaming.rb:217:in `_render_template'
actionview (5.0.0.rc1) lib/action_view/rendering.rb:83:in `render_to_body'
actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
actionpack (5.0.0.rc1) lib/action_controller/metal/renderers.rb:144:in `render_to_body'
actionpack (5.0.0.rc1) lib/abstract_controller/rendering.rb:26:in `render'
actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:36:in `render'
actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
activesupport (5.0.0.rc1) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
/Users/developer/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/benchmark.rb:308:in `realtime'
activesupport (5.0.0.rc1) lib/active_support/core_ext/benchmark.rb:12:in `ms'
actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
activerecord (5.0.0.rc1) lib/active_record/railties/controller_runtime.rb:30:in `cleanup_view_runtime'
actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:43:in `render'
actionpack (5.0.0.rc1) lib/action_controller/metal/implicit_render.rb:36:in `default_render'
actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `block in send_action'
actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `tap'
actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
actionpack (5.0.0.rc1) lib/abstract_controller/base.rb:181:in `process_action'
actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:126:in `call'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:455:in `call'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:101:in `__run_callbacks__'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:19:in `process_action'
actionpack (5.0.0.rc1) lib/action_controller/metal/rescue.rb:31:in `process_action'
actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (5.0.0.rc1) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `instrument'
actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (5.0.0.rc1) lib/action_controller/metal/params_wrapper.rb:248:in `process_action'
activerecord (5.0.0.rc1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (5.0.0.rc1) lib/abstract_controller/base.rb:126:in `process'
actionview (5.0.0.rc1) lib/action_view/rendering.rb:30:in `process'
actionpack (5.0.0.rc1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (5.0.0.rc1) lib/action_controller/metal.rb:262:in `dispatch'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:32:in `serve'
actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:39:in `block in serve'
actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `each'
actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `serve'
actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:725:in `call'
actionview (5.0.0.rc1) lib/action_view/digestor.rb:12:in `call'
warden (1.2.6) lib/warden/manager.rb:35:in `block in call'
warden (1.2.6) lib/warden/manager.rb:34:in `catch'
warden (1.2.6) lib/warden/manager.rb:34:in `call'
rack (2.0.0.rc1) lib/rack/etag.rb:25:in `call'
rack (2.0.0.rc1) lib/rack/conditional_get.rb:25:in `call'
rack (2.0.0.rc1) lib/rack/head.rb:12:in `call'
rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:222:in `context'
rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:216:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/cookies.rb:613:in `call'
activerecord (5.0.0.rc1) lib/active_record/migration.rb:552:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:in `run_callbacks'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
better_errors (2.1.1) lib/better_errors/middleware.rb:84:in `protected_app_call'
better_errors (2.1.1) lib/better_errors/middleware.rb:79:in `better_errors_call'
better_errors (2.1.1) lib/better_errors/middleware.rb:57:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
web-console (3.3.0) lib/web_console/middleware.rb:131:in `call_app'
web-console (3.3.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (3.3.0) lib/web_console/middleware.rb:18:in `catch'
web-console (3.3.0) lib/web_console/middleware.rb:18:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
railties (5.0.0.rc1) lib/rails/rack/logger.rb:36:in `call_app'
railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in `block in call'
activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:in `block in tagged'
activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:in `tagged'
railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in `call'
quiet_assets (1.1.0) lib/quiet_assets.rb:27:in `call_with_quiet_assets'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/request_id.rb:24:in `call'
rack (2.0.0.rc1) lib/rack/method_override.rb:22:in `call'
rack (2.0.0.rc1) lib/rack/runtime.rb:22:in `call'
activesupport (5.0.0.rc1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in `call'
actionpack (5.0.0.rc1) lib/action_dispatch/middleware/static.rb:136:in `call'
rack (2.0.0.rc1) lib/rack/sendfile.rb:111:in `call'
railties (5.0.0.rc1) lib/rails/engine.rb:522:in `call'
puma (3.4.0) lib/puma/configuration.rb:224:in `call'
puma (3.4.0) lib/puma/server.rb:569:in `handle_request'
puma (3.4.0) lib/puma/server.rb:406:in `process_client'
puma (3.4.0) lib/puma/server.rb:271:in `block in run'
puma (3.4.0) lib/puma/thread_pool.rb:114:in `block in spawn_thread'
Заранее благодарю вас за помощь! Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще!
РЕДАКТИРОВАТЬ # 2 - Контроллер Применение и модальные
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_filter :set_user
def set_user
@user = User.find_by_user_ident(params[:user_id])
@user = User.new
end
end
<%= form_for(@user, :url => push_user_edit_path) do |f| %>
<div class="modal fade" id="userEdit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Create New System User</h4>
</div>
<div class="modal-body">
<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.label :first_name %><br />
<%= f.text_field :f_name %>
</div>
<div class="field">
<%= f.label :middle_name %><br />
<%= f.text_field :m_name %>
</div>
<div class="field">
<%= f.label :last_name %><br />
<%= f.text_field :l_name %>
</div>
<div class="field">
<%= f.label :date_of_birth %><br />
<%= f.date_field :dob %>
</div>
<br />
<%= f.collection_select(:role, User::ROLES, :to_s, lambda{|i| i.to_s.humanize}) %>
<br />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<%= f.submit "Create User", :class => 'btn btn-primary' %>
</div>
</div>
</div>
</div>
<% end %>
РЕДАКТИРОВАТЬ # 3 - ActionController сервер вывода
ActionController::UrlGenerationError - No route matches {:action=>"update", :controller=>"admins"} missing required keys: [:id]:
это это все, что выводится, поскольку я даже не могу попасть на экран редактирования или в приложение. Это происходит, как только я вхожу в систему, поскольку форма находится в модальном файле application.html.erb
Где вы называете этот маршрут? –
no Patch, его доза не дает мне возможность публиковать –
единственный способ, которым я могу ПОЧТУ в этом контроллере с созданием, но я всегда думал, что POST был создан только для создания, а Patch - редактирование/обновление? –