如果按下用户/编辑链接,则会出现如下错误。
用户中的NoMethodError ::注册#edit
的routes.rb
Rails.application.routes.draw do
get 'user/show'
devise_for :users, controllers: { :omniauth_callbacks => "omniauth_callbacks", :registrations => "users/registrations" }
root 'home#index'
get 'home/show'
#User MyPage
resources :users
为什么会出现此错误?
我们准备了一个在github中导致错误的应用程序。注册后登录后,按“我的”页面将导致相应的错误。
答案 0 :(得分:0)
我看了一下你的项目,安装它并在我的本地机器上运行。
问题的原因是,当您执行get
users/edit
请求时,该app/controllers/users/registrations#edit
请求映射到运行'devise controller edit action'的resource
操作, action呈现一个表单,该表单使用devise registrations
帮助程序方法显示当前用户的数据。
这是在 # Authenticates the current scope and gets the current resource from the session.
def authenticate_scope!
send(:"authenticate_#{resource_name}!", force: true)
self.resource = send(:"current_#{resource_name}")
end
控制器内完成的,在运行编辑操作之前使用以下方法
resource_name
在您的情况下, user
将是admin
,但可能是user
,具体取决于您安装设计的方式。因此,它会返回resource
变量
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
在你的情况下,这是失败的
渲染表单时
resource
因为您可以从控制台检查错误消息if (Integer.valueOf(editText.getText().toString()) < 50) {
// Do what you want
}
将返回NameError ..
这就是我现在所知道的,我可能会在以后添加更多...我没有解决方案,但您应该尝试从您的gem文件调试控制器,以了解为什么设计没有实例化用户执行此get请求时的变量。不知何故,它失去了用户。