【发布时间】:2011-10-20 03:40:46
【问题描述】:
除了项目模板中给出的用户对象之外,我在创建一个名为 person 的对象时遇到问题:https://github.com/RailsApps/rails3-mongoid-devise/tree/master/script
devise-mongoid 组合真的不喜欢我创建的 person 对象。当我使用以下行尝试注销此人时:
devise 给我以下错误:
Mongoid::Errors::DocumentNotFound in PeopleController#show
找不到具有 id(s) sign_out 的类 Person 的文档。
Rails.root:/home/jyj/rubys/rails3-mongoid-devise
所以我认为它会将 sign_out 与某些人的 id 混淆。
我 grep 了项目文件夹中的所有用户实例,并为 person 对象模仿了所有实例。我还创建了自己的登录、注册页面,而不是直接使用 view/devise 文件夹中的页面。但我最初在签出 person 对象时遇到了很多麻烦。后来我发现我需要在我的 application.html.erb 文件中包含这个 javascript 标签:
<%#= csrf_meta_tag %>
<%= javascript_include_tag :defaults %>
请注意,我之前必须注释掉其他元标记,以便系统识别 javascript 标记,我不太明白。我还不得不在 config/initialize/devise.rb 文件中更改一行,即,
# config.sign_out_via = Rails.env.test? ? :get : :delete
config.sign_out_via = :delete
我发现(也许)User 和 Person 之间的差异是由于 User 的测试是在 factory_girl 中初始化的,而不是 Person。所以我在这方面也让 Person 看起来和 User 一样。但是看到不行后,我只是把上面的第一行注释掉了,简单的把sign_out方法设置为:delete。
但现在我的问题变成了系统无法识别行 authenticate_person!在我的 peoplecontroller.rb 文件中:
class PeopleController < ApplicationController
before_filter :authenticate_person!
def show
@person = Person.find(params[:id])
end
end
非常感谢您的帮助!任何附加代码均可应要求提供。这是我放入 javascript 标记、删除元标记并强制 sign_out 方法为 :delete 后的错误消息:
PeopleController#show 中的 NoMethodError
未定义的方法 `authenticate_person!'对于
Rails.root:/home/jyj/rubys/rails3-mongoid-devise
【问题讨论】:
标签: ruby-on-rails mongodb devise mongoid