2014-09-21 37 views
1

我在使用spree的應用程序中創建了新模型。我有一個新的模型叫讓我們說Something,我想狂歡Product與Something有一對多的關係。所以我加入的應用程序目錄中的文件夾,名爲spree和模型稱爲product.rb和裏面的代碼是修改Spree模型以添加更多關係

module Spree 
    class Product < Spree::Base 
    extend FriendlyId 

    has_many :somethings 
    end 
end 

如果我跑我的控制檯,我的產品能夠獲得的東西,但所有其他默認大禮包產品的方法都沒有。我想我重覆他們。我在做什麼錯誤?我想open瘋狂產品類,並添加我的新協會。

回答

3

你得猴補丁那個東西!

#{Rails.root} /lib/extensions/spree/product.rb

Spree::Product.class_eval do |variable| 
    has_many :somethings , class_name: Something ,:foreign_key => "something_id" 
end 

/#{Rails.root}/config/application.rb

config.autoload_paths += %W(#{config.root}/lib/extensions) 
+1

謝謝。在進一步挖掘之後,我在狂熱指南中找到了以下鏈接(http://guides.spreecommerce.com/developer/logic.html#extending- classes)來定製模型。 – 2014-09-21 12:03:10

+0

謝謝@我是蝙蝠俠。任何機會,你可以把它看作是接受的答案因爲看起來似乎我說的同樣的事情,瘋狂的文檔會讓你做的。沒有? – 2014-09-22 00:39:59

0

施普雷是一個鐵軌引擎(更多約rails engines here)。

這意味着無論您在應用程序中重新實現哪個類,該版本都將接管原始版本。

我的建議是:

  1. 找出你的大禮包的寶石位於:

    寶石

  2. 轉到應用,該應用大禮包/模型/大禮包和開放product.rb 。複製整個班級內容並將其粘貼到自己的班級中。

  3. 更新的類文件與新的功能aditions,像

    的has_many:出頭

+0

我不會推薦這種方法。它會使你的更新路徑與施普雷寶石非常脆弱。而且,它不清楚究竟發生了什麼變化。請看我的monkeypatch答案! – 2014-09-21 07:26:19

+0

@DarrenHicks猴子補丁對於剛開始使用rails和引擎的人來說是一種高級話題,因爲這似乎就是這種情況。 – 2014-09-21 07:27:49

+0

那麼,現在是他們開始建立良好習慣的好時機:) – 2014-09-21 07:29:07