用户的未定义方法'模型'

时间:2011-03-01 11:28:40

标签: ruby-on-rails devise cancan

我在Tony's tutorialsecond tutorial移动的Rails 3应用中进行了身份验证。

但是我得到了

  

用户

的未定义方法'模型'

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

尝试访问/ users / new

时出错

2 个答案:

答案 0 :(得分:0)

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

rails generate devise:views

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

中的代码

'<%= form_for(资源,:as => resource_name,:url => registration_path(resource_name))do | f | %GT;'

你会注意到没有@user - 使用@user会导致未定义的方法模型错误。

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

答案 1 :(得分:0)

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

以下是我注意到的一些事情:

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

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

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