在液体模板中,这是这样实现的:
{{ product.metafields.book.author }}
返回关键"图书"的"作者"值
我正在使用Shopify API和Ruby on Rails,并成功地在给定产品的每个元域上循环:
在控制器中:
@products = ShopifyAPI::Product.find(:all, :params => {:limit => 10})
在视图中:
<% @products.metafields.each do |metafield| %>
<%= metafield.key %> : <%= metafield.value %>
<% end %>
这将按预期返回产品的所有元字段。如何只返回那些与特定关键字匹配的元字段,即上例中的"book"?
# 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
这似乎奏效了:
<% 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 %>
这是有效的:
ShopifyAPI::Metafield.find(:first,:params=>{:resource => "products", :resource_id => 94549954, :key => "book"})
ShopifyAPI::Metafield.find(:all,:params=>{:product_id => product.id, :key=> 'book'})
您可以获取产品的所有元字段
@product = ShopifyAPI::Product.find(params[:id])
之后,你可以得到它的元域
@metafields = @product.metafields
或者,如果您只需要该产品的特定元字段
@metafield = ShopifyAPI::Product::Metafield.find(:all, where: {"product_id = ? AND metafield.key = ?", product.id, "book"})