【问题标题】:Undefined method 'model' for User用户的未定义方法“模型”
【发布时间】:2011-03-01 11:28:40
【问题描述】:

我在被Tony's tutorial 和这个second tutorial 闲置的Rails 3 应用程序中进行了身份验证。

但我明白了

用户的未定义方法“模型”

这只是从教程中复制/粘贴,我认为这是我的应用架构中的问题:)

当我尝试访问 /users/new 时出现错误

【问题讨论】:

  • 我遇到了同样的问题,我不记得解决方案了。您能否将应用程序打包成一个 zip 文件,以便我们轻松下载?我也跟着那个教程,你可以在这里找到我的代码,如果它有任何用处github.com/augusto/devise-cancan-spike
  • 对不起,我的意思是整个项目,因为我认为它与项目的 gem 文件有关。
  • 对不起 :) anticdesign.info/work/ror/wstmgn_development_2011-03-01.sql 和 anticdesign.info/work/ror/wstmgn.zip 我认为我的迁移不好,因为我附上我的 mysql 转储
  • 在什么情况下会出现这个错误?

标签: ruby-on-rails devise cancan


【解决方案1】:

我无法重现您在我的本地遇到的问题,这是我最好的猜测:@user 存在于您的视图中的唯一原因是您在控制器中调用 load_and_authorize_resource,这是一个创建的 CanCan 方法@user 对象。这可能是您的问题的根源,因此您可以尝试使用 authorize_resource,然后在您的新方法中显式创建 @user。

以下是我注意到的几件事:

  1. devise 的标准创建用户路径是 /users/sign_up,但您使用的是 /users/new,它指向不属于设计的自定义用户控制器,这在使用可确认的设计模块时会很成问题,因为它不会创建确认令牌或发送电子邮件。
  2. 您已经创建了一个用于注册的自定义控制器,但您还没有告诉 devise。您需要在您的 routes.rb 文件中执行类似 devise_for :users, :controllers => { :registrations => "users/registrations" } 的操作,以便设计使用您的控制器。
  3. 进入注册页面进行加载后,您需要将 first_name 和 last_name 添加到数据库中,否则不会出现方法错误。

在深入探讨您当前的问题之前,我会先解决这些问题。

在开始添加报告界面之前,可能值得将代码精简为 Tony 所拥有的并使其正常工作。我看到您的数据库中的角色列表为“super_admin”、“global_user”和“internal_user”,但您在查询之前对字符串调用了 camelize,所以我怀疑 CanCan 在您的环境中是否正常工作。

最后一件事,请确保您更改所有密码和您共享的所有内容 - 看看 this post for a list of files to change

【讨论】:

    【解决方案2】:

    要自定义由 Devise 创建的视图,首先在您的应用程序中生成它们。

    rails 生成设计:视图

    这会导入您需要的所有视图,您可以根据自己的喜好对其进行自定义。这是来自新用户视图的代码 (/devise/registrations/new.html)

    ' resource_name, :url => registration_path(resource_name)) 做 |f| %>'

    您会注意到没有@user - 使用@user 会引发未定义方法模型错误。

    不知道为什么使用资源而不是@user,但希望这会让你继续前进。

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      • 2021-08-02
      • 2020-04-04
      • 2016-11-04
      • 2013-09-13
      • 2018-11-17
      相关资源
      最近更新 更多