2016-06-29 5 views
0

Я создаю приложение, и я решил использовать 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.

Я прошел через код снова и снова, но безрезультатно!

EDIT # 1 - ScreenShot enter image description here Это сообщение об ошибке я получаю.

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">&times;</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

+0

Где вы называете этот маршрут? –

+0

no Patch, его доза не дает мне возможность публиковать –

+0

единственный способ, которым я могу ПОЧТУ в этом контроллере с созданием, но я всегда думал, что POST был создан только для создания, а Patch - редактирование/обновление? –

ответ

0

Я думаю, что ваша ошибка будет от вашего form_for.

Оно должно быть:

form_for @user, url: push_edit_user_path(@user) do |f| 
    ... 
end 
+0

все еще такая же ошибка –

+0

, если ваши рейк-маршруты показывают 'push_edit_user', тогда я считаю, что вы не должны получать ту же ошибку. Какие конкретные ошибки вы сейчас получаете – oreoluwa

+0

, это то, что он показывает .. его странное я знаю .. вот почему я пришел сюда .. lol .. Я понятия не имею, что происходит .. –

Смежные вопросы