gpt4 book ai didi

mysql - 设计助手返回零

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:05 24 4
gpt4 key购买 nike

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

<% if client_signed_in? %>

为未签名/已签名的客户端呈现不同的 html。起初我使用 SQLite3 并且一切正常,直到我尝试使用 MySQL。所以,我运行了迁移文件,插入了与 rake db:seed 相同的数据。并使用 Devise API 注册,然后我检查数据是否已插入数据库。然后我尝试使用相同的 API 登录并针对上面的行得到以下错误:

undefined method `to_sym' for nil:NilClass

或日志中更具体的版本:

ActionView::Template::Error (undefined method `to_sym' for nil:NilClass):
11: <div class="navbar navbar-default navbar-fixed-top" role="navigation">
12: <div class="container">
13: <ul class="nav navbar-nav navbar-right">
14: <% if client_signed_in? %>
15: <li class="dropdown">
16: <a href="#" class="dropdown-toggle" data-toggle="dropdown">
17: <span class="glyphicon glyphicon-user"></span> 
app/views/layouts/application.html.erb:14:in `_app_views_layouts_application_html_erb___3350269212856659822_70353324331380'

我对所有 Devise 助手都一样,比如 current_client (对应型号为Client)等。

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

Client型号:

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

session 转储:

_csrf_token: "YYUINrP+2synbq2bayWVozyo3nfGVtzkxDd9QJn9S4k=" flash: {"discard"=>[], "flashes"=>{"notice"=>"Signed in successfully."}} session_id: "6ab5a131dc9300e2a3c0dbd4e00218f0" warden.user.client.key: [[2], "$2a$10$bqpnIBKi4XCy64TH1zzhB."]

因此,如您所见, session 不为空,它需要正确的 id从模型/数据库中,登录过程也成功。

环境转储:

GATEWAY_INTERFACE: "CGI/1.1"
HTTP_ACCEPT:"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
HTTP_ACCEPT_ENCODING: "gzip,deflate,sdch"
HTTP_ACCEPT_LANGUAGE: "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4"
HTTP_CACHE_CONTROL: "max-age=0"
REMOTE_ADDR: "::1"
REMOTE_HOST: "::1"

最佳答案

感谢您发布所有详细信息。这是调试它的建议。

设计自动生成方法,例如您的 client_signed_in? 不起作用。

您可以通过编辑 Devise 源代码来拦截此方法,并了解发生了什么。

Devise 有一个包含自动生成代码的文件 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 因为这种调试非常棒:http://www.jackkinsella.ie/2014/06/06/debugging-rails-with-pry-debugger.html

def current_#{mapping}
binding.pry
@current_#{mapping} ||= warden.authenticate(scope: :#{mapping})
end

我的猜测是这个方法是你的错误发生的地方,并且“映射”变量可能是零。

关于mysql - 设计助手返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com