2014-12-04 73 views
0

你好老鄉施普雷用戶,Spree_auth_devise寶石與設計

我想了解多一點關於spree_auth_devise寶石與狂歡的作品。如果我已將Devise設置爲用戶身份驗證,那麼我是否還需要這個?它將我現有的Devise用戶模型與其用戶類集成在一起,給我帶來了一些問題。我已經多次閱讀文檔(鏈接here

遵循狂潮指南,我修改了spree.rb文件,以便它引用我的用戶類。應用程序/配置/初始化/ spree.rb:

Spree.user_class = "User" 

     Rails.application.config.to_prepare do 
     require_dependency 'spree/authentication_helpers' 
     end 

我然後跑遷移到必要的大禮包列添加到我的用戶表。

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 

它遷移得很好。服務器開始,但是當我瀏覽到我安裝狂歡,我得到這個錯誤:#User

未定義的方法`last_incomplete_spree_order」:0x007fb1e51824c0

原來,Spree.user_class我已經改爲「當我添加spree_auth_devise時,由於某種原因,用戶「會變回Spree :: User。我在我的rails控制檯中驗證了這一點。所以這是有道理的,爲什麼我得到這個錯誤,因爲所有這些Spree方法是由Spree用戶類定義的。

當我刪除spree_auth_devise gem時,突然一切正常,我的Spree.user_class正確定義爲我設置它(「用戶」)。

所以我想我會垃圾那個寶石,繼續我的生活。但顯然如果他們沒有安裝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 

綜上所述:

到底爲什麼要用這種寶石?我怎樣才能保留它,但改變它,以便它知道我的用戶類?謝謝。

回答

2

Spree Auth Devise僅用於Spree身份驗證。由於您已經設置了Devise,因此我只會將Spree Auth Devise用作任何Spree特定用戶問題的示例代碼庫,並繼續使用User作爲您的熱門用戶類。

# config/initializers/spree.rb 
Spree.user_class = "User" 

對於遷移,我會刪除任何spree_ath_devise特定的遷移。從Rails引擎最後的Rails命名空間遷移開始,您將知道它們是SAD遷移。例如:

20141124203907_add_confirmable_to_users.spree_auth.rb 

希望這會有所幫助。

編輯:

我一直在尋找在未定義的方法last_incomplete_spree_order並且似乎它得到施普雷核心的內部定義爲當用戶施普雷類被設置。 Source code here.

+0

嗨,非常感謝你的回覆。我一直懷疑是這種情況,但是害怕跳躍並刪除這些遷徙。我現在要試一下,看看我能否部署到Heroku。 – Haymaker87 2014-12-05 03:41:56