首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord::RecordNotFound -在Rails中找不到id=用户

ActiveRecord::RecordNotFound -在Rails中找不到id=用户
EN

Stack Overflow用户
提问于 2016-11-04 10:19:00
回答 1查看 1.8K关注 0票数 0

我正在遵循本教程链接进行JQuery验证。

在这条线路上,他们给出的路线如下:

在routes.rb中

代码语言:javascript
复制
map.check_email “users/check_email”, :controller => “users”, :action => “check_email”
map.resources :users

当它抛出错误时,我更改了:

代码语言:javascript
复制
  match '/check_email' => 'users#check_email', :as => 'check_email'

  devise_for :users, :controllers => {:sessions => 'sessions'}, :path => '', :path_names => { :sign_in => "login", :sign_out => "logout" }

将jquery.validate添加到资产/javascripts中。

users_controller.rb:

代码语言:javascript
复制
def check_email
  Rails.logger.debug "check_email..................."
  @user = User.find_by_email(params[:user][:email])
  respond_to do |format|
   format.json { render :json => !@user }
  end
end

  def show
    @user = User.find(params[:id])
    @hide_logo_section = Rails.application.config.custom.force_report_logo_accounts.include?(@user.account.name)

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

在会话/新建中,登录表单后面跟着忘记密码。app/views/sessions/new.html.erb:

代码语言:javascript
复制
<%= semantic_form_for(resource_name, :url => password_path(resource_name), :remote => true, :format => :json, :html => { :id => 'password_reset' }) do |f| %>
          <%= f.inputs do %>        
              <%= f.input :email, :label => 'Your email address', :input_html => {  :id => 'user_email_field',:placeholder => "Enter your email..."}%>
                          <label id="error_explanation1" class="error errorExplanation" style="margin-top:-10px;"></label>

          <% end %>
          <%= f.buttons do %>
            <%= f.commit_button :label => 'Send me that link', :button_html => {:class => 'submit button', :id => 'forgot_password_button', :disable_with => 'Wait...' }%>
          <% end %>

        <% end %>

<script type="text/javascript">
$(document).ready(function () {
  alert('hellllllll');
  $('#password_reset').validate({
    debug: true,  
    rules: {
      'user[email]': {required: true, email: true, 
        remote:'/users/check_email' }
    }
  });
});
</script>

我用遥控器在上面的脚本中调用控制器。所需的和电子邮件验证是好的,但它是抛出错误时,检查方法。实际上,它不会转到check_email方法并在日志中显示id=check_email。这是我的日志:

在2016-11-04 15:36:22 +0530处启动GET "/login“作为SessionsController#new呈现的会话/new.html.erb在布局/home内(1152.6ms)呈现在home/_home er.html.erb (0.5ms)呈现的home/_footer.html.erb (0.4ms)在1718 as中完成200 OK (查看: 1315.0ms ActiveRecord: 0.0ms) 在2016-11-04 15:36:24 +0530 RailsDevTweaks上为127.0.0.1启动GET "/assets/application.js“:跳过ActionDispatch::Reloader钩子用于此请求。 在2016-11-04 15:36:38 +0530 "/users/check_email?user%5Bemail%5D=test1%40gmail.com“上启动GET for 127.0.0.1 RailsDevTweaks:::Reloader钩子用于此请求。将UsersController#show处理为JSON参数:{“用户”=>{“电子邮件”“=>”test1@gmail.com}、“id”“=>”check_email“”}用户加载(0.5ms)从“用户”选择“用户”.*。“account_id”为NULL和“User”。“id”=?(users.deleted_at为NULL)限制1 ["id","check_email"]完成404在331 IS中找不到 ActiveRecord::RecordNotFound -无法找到id=check_email中的“用户”。“account_id”为NULL,(users.deleted_at为NULL): (gem) activerecord-3.2.13/lib/active_record/relation/finder_methods.rb:343:in find_one' (gem) activerecord-3.2.13/lib/active_record/relation/finder_methods.rb:314:in find_with_ids‘(gem) activerecord-3.2.13/lib/active_record/relation/finder_methods.rb:107:in find' (gem) activerecord-3.2.13/lib/active_record/associations/collection_association.rb:95:infind’(gem) activerecord-3.2.13/lib/active_record/associations/collection_proxy.rb:46:in find' (gem) inherited_resources-1.3.1/lib/inherited_resources/base_helpers.rb:44:in resource (gem) cancan-1.6.9/lib/cancan/inherited_resource.rb e.rb:12:in load_resource_instance' (gem) cancan-1.6.9/lib/cancan/controller_resource.rb:32:inload_resource‘ (gem) cancan-1.6.9/lib/cancan/controller_resource.rb:25:in load_and_authorize_resource' (gem) cancan-1.6.9/lib/cancan/controller_resource.rb:10:inblock in add_before_filter‘(gem) activesupport-3.2.13/lib/active_support/callbacks.rb:429:in _run__917766069841795016__process_action__2108608744963441679__callbacks' (gem) activesupport-3.2.13/lib/active_support/callbacks.rb:405:in __run_callback’(gem) activesupport-3.2.13/lib/active_support/callbacks.rb:385:in _run_process_action_callbacks' (gem) activesupport-3.2.13/lib/active_support/callbacks.rb:81:in run_callbacks (gem) actionpack-3。2.13/lib/abstract_controller/callbacks.rb:17:in process_action' (gem) actionpack-3.2.13/lib/action_controller/metal/rescue.rb:29:in process_action‘(gem)仪器中的actionpack-3.2.13/lib/action_controller/metal/instrumentation.rb:30:in block in process_action' (gem) activesupport-3.2.13/lib/active_support/notifications.rb:123:in块’(gem) activesupport-3.2.13/lib/active_support/notifications/instrumenter.rb:20:in instrument' (gem) activesupport-3.2.13/lib/active_support/notifications.rb:123:in metal‘(gem) actionpack-3.2.13/lib/action_控制器/metalactiverecord-3.2.13/lib/active_record/railties/controller_runtime.rb:18:in /instrumentation.rb:29:in process_action' (gem) actionpack-3.2.13/lib/action_controller/metal/params_wrapper.rb:207:in process_action‘(gem) process_action' (gem) actionpack-3.2.13/lib/abstract_controller/base.rb:121:in工艺 (gem) actionpack-3.2.13/lib/abstract_controller/rendering.rb:45:in process' (gem) actionpack-3.2.13/lib/action_controller/metal.rb:203:in调度 (gem) actionpack-3.2.13/lib/action_controller/metal/rack_delegation.rb:14:in dispatch' (gem) actionpack-3.2.13/lib/action_controller/metal.rb:246:in块在行动中‘(gem) actionpack-3.2.13/lib/action_dispatch/routing/route_set.rb:73:in call' (gem) actionpack-3.2.13/lib/action_dispatch/routing/route_set.rb:73:in调度’(gem) actionpack-3.2.13/lib/action_dispatch/routing/route_set.rb:36:in call' (gem) journey-1.0.4/lib/journey/router.rb:68:inblock in call (gem)之旅-1.0.4/lib/lib/router.rb:56:in each' (gem) journey-1.0.4/lib/journey/router.rb:56:incall‘(gem) each' (gem) journey-1.0.4/lib/journey/router.rb:56:in call' (gem) meta_request-0.2.1/lib/meta_request/middlewares/app_request_handler.rb:11:in call’

请帮助helpActiveRecord::RecordNotFound -无法用id=找到用户

EN

回答 1

Stack Overflow用户

发布于 2016-11-04 13:41:59

问题就在你的路线上。检查rails文档说了什么:

Rails路由按照指定的顺序进行匹配,因此,如果您有一个资源: get“照片/轮询”上方的照片将在get行之前匹配该资源行的show路由。要解决这个问题,请将get行移到资源行的上方,以便首先匹配。

当您调用URL:/users/check_email时,实际上是在执行users#show操作。

将您的check_email路由更改为

代码语言:javascript
复制
get '/users/validation/check_email', to: 'users#check_email', as: :check_email

它会成功的。

ps:不要忘记更新javascript上的url。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40420160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档