你好Spree的用户,
我想更多地了解与Spree一起使用的spree_auth_devise gem。如果我已经为用户身份验证设置了Devise,我是否还需要这个?它在将我现有的Devise用户模型与其用户类集成方面给了我一些问题。我已多次阅读文档(链接here)
按照狂欢指南,我修改了spree.rb文件,以便它引用我的User类。应用程序/配置/初始化/ spree.rb:
Spree.user_class = "User"
Rails.application.config.to_prepare do
require_dependency 'spree/authentication_helpers'
end
然后我运行了迁移,将必要的spree列添加到我的User表中。
class AddSpreeFieldsToCustomUserTable < ActiveRecord::Migration
def up
add_column "users", :spree_api_key, :string, :limit => 48
add_column "users", :ship_address_id, :integer
add_column "users", :bill_address_id, :integer
end
end
它迁移得很好。服务器启动,但当我导航到我安装Spree的地方时,我收到此错误:
未定义的方法`last_incomplete_spree_order&#39;对于#User:0x007fb1e51824c0
原来我已将Spree.user_class更改为&#34; User&#34;当我添加spree_auth_devise时,出于某种原因将其更改回Spree :: User。我在rails控制台中验证了这一点。因此,为什么我会收到该错误是有道理的,因为所有这些Spree方法都是由Spree用户类定义的。
当我删除spree_auth_devise gem时,突然一切正常,我的Spree.user_class被正确定义为我设置它(&#34; User&#34;)。
所以我想我会把那颗宝石丢掉,继续我的生活。但是,如果他们没有安装spree_auth_devise gem,显然让其他人撤下我的回购会导致Spree迁移出现问题。因此,我必须告诉他们将其添加到迁移中,然后在迁移完成后再次将其删除。
还找到了在spree_auth_devise gem中设置用户类的代码。我不敢在这里改变它。
spree_auth_devise / LIB /礼包/ AUTH / engine.rb:
initializer "spree_auth_devise.set_user_class", :after => :load_config_initializers do
Spree.user_class = "Spree::User
end
总结一下:
为什么我需要这个宝石?如何保留它但更改它以便它知道我的用户类?感谢。
答案 0 :(得分:2)
Spree Auth Devise仅适用于狂欢认证。由于您已经安装了Devise,我只需使用Spree Auth Devise作为任何Spree特定用户问题的示例代码库,并继续使用User
作为您的spree用户类。
# config/initializers/spree.rb
Spree.user_class = "User"
对于迁移,我会删除任何spree_auth_devise特定的迁移。自Rails引擎最终迁移Rails名称空间以来,您已经知道他们已经进行了SAD迁移。例如:
20141124203907_add_confirmable_to_users.spree_auth.rb
希望这有帮助。
编辑:
我正在查看未定义的方法last_incomplete_spree_order
,并且当Spree用户类设置时,它似乎在Spree Core内部定义。 Source code here.