Mysql 设计助手返回零

Mysql 设计助手返回零,mysql,ruby-on-rails,ruby,ruby-on-rails-4,devise,Mysql,Ruby On Rails,Ruby,Ruby On Rails 4,Devise,我在/layouts/application.html.erb中有这一行: <% if client_signed_in? %> 我对所有Desive助手都有相同的要求,比如当前的\u客户端(对应的模型是客户端)等等 database.yml: development: adapter: mysql2 encoding: utf8 database: development pool: 5 username: root password: socket:

我在
/layouts/application.html.erb
中有这一行:

<% if client_signed_in? %>
我对所有Desive助手都有相同的要求,比如
当前的\u客户端
(对应的模型是
客户端
)等等

database.yml

development:
  adapter: mysql2
  encoding: utf8
  database: development
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock
ApplicationHelper

module ApplicationHelper
    def resource_name
        :client
    end

    def resource
        @resource ||= Client.new
    end

    def devise_mapping
        @devise_mapping ||= Devise.mappings[:client]
    end 
end
客户端
型号:

class Client < ActiveRecord::Base
    devise :database_authenticatable, :registerable
end

谢谢你发布所有的细节。这里有一个调试它的建议

设计自动生成方法,例如您的
客户端\u登录?
不起作用

您可以通过编辑designe源代码截取此方法,并找出发生了什么

Desive有一个包含自动生成代码的文件
helper.rb

def #{mapping}_signed_in?
  !!current_#{mapping}
end

def current_#{mapping}
  @current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
end
要拦截该方法,可以使用调试器、打印或引发:

def current_#{mapping}
  raise "Devise current mapping #{__method__} symbol is " + (:{mapping}).to_s
  @current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
end
如果您使用pry,或者想学习pry,因为它不适合这种调试:


我猜这个方法就是发生错误的地方,“mapping”变量可能是零。

请发布整个错误消息。@joelparkerhenderson:你能更具体一点吗?我只收到上面的信息。你需要框架跟踪吗?很好,这很有帮助。您可以发布您的方法的代码吗
客户端\u登录?
请?还有,你确定这是一个很长的方法名,不应该是两个带点的方法,即
客户端。已登录?
@joelparkerhenderson:我没有任何代码,这是一个design方法。有一些信息。我也尝试了
已登录的客户端(:client)
,同样的问题。不知为什么它没有给出任何结果(使用
raise
print
)-它只是抛出了相同的错误。(顺便说一句,我是ruby和RoR的新手)。真正让我失望的是,它在SQLite数据库中运行良好,所以可能是排序或编码问题。
def #{mapping}_signed_in?
  !!current_#{mapping}
end

def current_#{mapping}
  @current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
end
def current_#{mapping}
  raise "Devise current mapping #{__method__} symbol is " + (:{mapping}).to_s
  @current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
end
def current_#{mapping}
  binding.pry
  @current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
end