代码之家  ›  专栏  ›  技术社区  ›  Maayan Naveh

gem模块与AR模型的区别

  •  0
  • Maayan Naveh  · 技术社区  · 6 年前

    Listing 模块。 我也有相应的 在我的应用程序中建模。

    我试图设置一个sidekiq工作者来处理gem,调用一些方法并更新相应的 上市 include Etsy 为了使用gem,rails感到困惑,认为我指的是模块而不是模型。

    代码如下:

    class ListingWorker
      include Sidekiq::Worker
      include Etsy
    
      def perform(seller, shop)
        access_token = {access_token: seller.oauth_token,
                  access_secret: seller.request_secret}
        myself = Etsy.myself(access_token[:access_token], access_token[:access_secret])
        limit = 100
        offset = 0
        total_results = myself.shop.active_listings_count
    until offset > total_results
      listings = Etsy::Request.get("/shops/#{shop.shop_id}/listings/active",
                                   access_token.merge(limit: limit.to_s,
                                                offset: offset.to_s,
                                                include_private: 'true',
                                                includes: 'Images:1:0'))
                              .to_hash
      offset += limit
    
      listings['results'].each do |l|
        listing = Listing.find_by(listing_id: l['listing_id'])
    

    结束

    我得到的错误是:

    undefined method `find_by' for Etsy::Listing:Class
    

    如何区分模块和模型,并让rails理解我指的是db表?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tom Lord    6 年前

    对你的问题的简短回答是 include Esty

    class ListingWorker
      include Sidekiq::Worker
    
      def perform(seller, shop)
        # ...
      end
    end
    

    目的 include 将用模块定义的方法添加到类中。

    例如,如果我定义了一个模块:

    module Tom
      def hello
        puts "Hello!"
      end
    end
    

    hello 直接在你的 ListingWorker 班级, include Tom .

    另一方面,假设我只是在模块中定义了一个“namespaced”方法,例如:

    module Maayan
      def self.example
        puts "Example"
      end
    end
    

    Maayan.example .

    您可以从任何地方执行此操作(只要加载了包含此代码的文件);您不需要 什么都行。

    这就是你在这里所做的——为了运行 Etsy.myself Etsy::Request.get ,你不需要 包括


    但是,如果你 ::

    换句话说,你可以使用 ::Listing 显式引用自己的类。