Ruby on rails 修改Spree模型以添加更多关系

Ruby on rails 修改Spree模型以添加更多关系,ruby-on-rails,ruby,models,spree,Ruby On Rails,Ruby,Models,Spree,我在使用spree的应用程序中创建了新模型。我有一个新的模型,叫做“lets saySomething”,我想大力推广Product,让它与某物建立一对多的关系。因此,我在apps目录中添加了一个名为spree的文件夹和名为product.rb的模型,其中的代码是 module Spree class Product < Spree::Base extend FriendlyId has_many :somethings end end 模块狂欢 类产品

我在使用spree的应用程序中创建了新模型。我有一个新的模型,叫做“lets say
Something
”,我想大力推广
Product
,让它与某物建立一对多的关系。因此,我在apps目录中添加了一个名为
spree
的文件夹和名为
product.rb的模型,其中的代码是

module Spree
  class Product < Spree::Base
    extend FriendlyId

    has_many :somethings
  end
end
模块狂欢
类产品
如果我运行控制台,我的产品可以访问某些内容,但所有其他默认的spree产品方法都不能。我想我超越了他们。我犯了什么错误?我想
打开
spree products类并添加我的新关联

Spree是rails引擎(更多信息)

这意味着无论您在应用程序中重新实现什么类,该版本都将取代原始版本

我的建议是:

  • 找出您的spree gem所在的位置:

    疯狂的宝石

  • 转到app/models/spree并打开product.rb。复制整个课程内容并将其粘贴到您自己的课程中

  • 使用新的要素标注更新类文件,如

    你有很多东西吗


  • 你得把那玩意弄坏

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

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

    config.autoload_路径+=%W(#{config.root}/lib/extensions)
    
    我不推荐这种方法。这将使你的升级路径与疯狂宝石非常脆弱。此外,还不清楚到底发生了什么变化。请看我的答案@DarrenHicks monkey patching对于刚开始使用rails和引擎的人来说是一个高级话题,因为似乎是这样。那么,现在是他们开始养成良好习惯的好时机:)也许吧。元编程是一个全新的话题,有时人们只需要一个好的答案就可以继续学习。他实际上是想重新打开课堂。我告诉他做他想做的事的正确方法。“我想打开spree products课程并添加我的新关联。”他很困惑,为什么他重新打开的课程不起作用。请找更好的东西来挑剔…谢谢。在深入研究之后,我在《spree定制模型指南》中找到了以下链接()。谢谢@I-am-batman。你有没有可能把这个标记为接受答案,因为看了之后,我说的似乎和spree docs让你做的一样。不
    Spree::Product.class_eval do |variable|
      has_many :somethings , class_name: Something ,:foreign_key => "something_id" 
    end