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