【问题标题】:Selecting a specific metafield for a product using Shopify API, Ruby on Rails使用 Shopify API、Ruby on Rails 为产品选择特定元字段
【发布时间】:2012-07-18 09:12:13
【问题描述】:

在液体模板中,这是这样实现的:

{{ product.metafields.book.author }}

返回 'author' 的值作为它的键 'book'

我正在使用 Shopify API 和 Ruby on Rails,并已成功遍历给定产品的每个元字段:

在控制器中:

@products = ShopifyAPI::Product.find(:all, :params => {:limit => 10})

在视图中:

<% @products.metafields.each do |metafield| %>
<%= metafield.key %> : <%= metafield.value %>
<% end %>

这会按预期返回产品的所有元字段。如何仅返回与特定键匹配的元字段,即上面示例中的“书”?

【问题讨论】:

    标签: ruby-on-rails-3.1 shopify


    【解决方案1】:
    # add metafield
    product = ShopifyAPI::Product.find(product_id)
    product.add_metafield(ShopifyAPI::Metafield.new({
       :description => 'Author of book',
       :namespace => 'book',
       :key => 'author',
       :value => 'Kurt Vonnegut',
       :value_type => 'string'
    }))
    
    # retrieve metafield
    author = ShopifyAPI::Metafield.find(:first,:params=>{:resource => "products", :resource_id => product.id, :namespace => "book", :key => "author"}).value
    

    更多信息:http://www.shopify.com/technology/3032322-new-feature-metafields

    【讨论】:

      【解决方案2】:

      这似乎可以解决问题:

      <% product.metafields.each do |metafield| %>
          <% if metafield.key == "book" %>
              <%= metafield.key %>: <%= metafield.value %><br/>
          <% end %>
      <% end %>
      

      <% product.metafields.each do |metafield| %>
          <% if metafield.key.include?("book") %>
              <%= metafield.key %>: <%= metafield.value %><br/>
          <% else %>
      <% end %>
      

      【讨论】:

      • 我想这在控制器中比在视图中更好。任何adice都会很酷
      • 您不会在控制器中使用该代码,因为您正在打印元字段,这是您在视图中自然执行的操作
      【解决方案3】:

      这行得通:

      ShopifyAPI::Metafield.find(:first,:params=>{:resource => "products", :resource_id => 94549954, :key => "book"}) 
      

      【讨论】:

        【解决方案4】:
        ShopifyAPI::Metafield.find(:all,:params=>{:product_id => product.id, :key=> 'book'})
        

        【讨论】:

        • 您好约翰,感谢您的回答。我在实现这一点时遇到了一些麻烦,您介意详细说明一下代码吗?
        • 这对我来说只是返回一个空数组。我在 IRB 中尝试过使用最少的参数,即 ShopifyAPI::Metafield.find(:all,:params=>{:product_id => 94549896})
        • 这项工作:ShopifyAPI::Metafield.find(:first,:params=>{:resource => "products", :resource_id => 94549954, :key => "book"})
        【解决方案5】:

        您可以获得产品的所有元字段

        @product = ShopifyAPI::Product.find(params[:id])
        

        之后,你可以得到它的元字段

        @metafields = @product.metafields
        

        或者,如果您只需要该产品的特定元字段

        @metafield = ShopifyAPI::Product::Metafield.find(:all, where: {"product_id = ? AND metafield.key = ?", product.id, "book"})
        

        【讨论】:

          猜你喜欢
          • 2020-06-30
          • 1970-01-01
          • 2013-07-16
          • 1970-01-01
          • 1970-01-01
          • 2018-06-19
          • 2020-10-14
          • 2020-01-13
          • 2011-05-04
          相关资源
          最近更新 更多