设计错误「未定义方法'错误&#39; for#<user :: activerecord_relation:0x007fd10be58b00>

时间:2017-10-22 09:27:27

标签: ruby-on-rails devise

如果按下用户/编辑链接,则会出现如下错误。

  

用户中的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中导致错误的应用程序。注册后登录后,按“我的”页面将导致相应的错误。

github‌​.com/tib777/sample

1 个答案:

答案 0 :(得分:0)

我看了一下你的项目,安装它并在我的本地机器上运行。

问题的原因是,当您执行get users/edit请求时,该app/controllers/users/registrations#edit请求映射到运行'devise controller edit action&#39;的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请求时的变量。不知何故,它失去了用户。