2015-08-20 55 views
7

我在處理Rails 4動作郵件預覽和工廠女孩時遇到了相當惱人的問題。下面是我的一些代碼的示例:Rails 4操作郵件預覽和工廠女孩問題

class TransactionMailerPreview < ActionMailer::Preview 
    def purchase_receipt 
    account = FactoryGirl.build_stubbed(:account) 
    user = account.owner 
    transaction = FactoryGirl.build_stubbed(:transaction, account: account, user: user) 
    TransactionMailer.purchase_receipt(transaction) 
    end 
end 

這真的可以是任何動作郵件預覽。可以說我出錯了(每次都會發生),並且出現錯誤。我修復了錯誤並刷新了頁面。每次發生這種情況時,我都會收到:

「Rails中的參數錯誤:: MailersController#preview 用戶的副本已從模塊樹中刪除,但仍處於活動狀態!

然後我唯一的出路是重新啓動我的服務器。

我在這裏錯過了什麼嗎?任何線索是什麼導致這種情況以及如何避免?因爲這個原因,我在過去的一週重新啓動了我的服務器100次。

編輯:它可能實際上發生任何時候我編輯我的代碼並刷新預覽?

回答

0

雖然這不完全是一個答案(但也許是一個線索),我也有這個問題。

您的工廠是否會導致任何記錄實際上被保留?

我最終使用了Factory.build,並且使用私有方法和OpenStructs來保留所有其他對象,以確保所有對象都在每次重新加載時都新鮮創建,並且沒有任何內容可以重新加載。

我想知道是什麼FactoryGirl.build_stubbed用來欺騙系統認爲對象被持久導致系統嘗試並重新加載它們(在它們消失後)。

這裏是爲我工作的一個片段:

class SiteMailerPreview < ActionMailer::Preview 

    def add_comment_to_page 
    page = FactoryGirl.build :page, id: 30, site: cool_site 
    user = FactoryGirl.build :user 
    comment = FactoryGirl.build :comment, commentable: page, user: user 
    SiteMailer.comment_added(comment) 
    end 

    private 

    # this works across reloads where `Factory.build :site` would throw the error: 
    # A copy of Site has been removed from the module tree but is still active! 
    def cool_site 
    site = FactoryGirl.build :site, name: 'Super cool site' 
    def site.users 
     user = OpenStruct.new(email: '[email protected]') 
     def user.settings(sym) 
     OpenStruct.new(comments: true) 
     end 
     [user] 
    end 
    site 
    end 

end 

我雖然不是完全滿意這種做法,我不明白那些錯誤了。

我很想聽聽其他人是否有更好的解決方案。