我的模型中有以下方法find_or_create_by
用于查找或创建新产品。
def self.save_prod(product)
Product.find_or_create_by_prod_id(product)
product_data = ItemData.get_product_data(product)
p.update_attributes(
:prod_id => product,
:upc => product_data[:upc],
:title => product_data[:title]
)
end
该ItemData.get_product_data()
方法是一个模块方法,它调用 API 来获取产品数据:
def self.get_product_data(product)
url_raw = URI.parse("http://www.api.com/v1/itemid=#{product}")
url = Net::HTTP.get_response(url_raw).body
@resp = JSON.parse(url)
@title = Sanitize.clean(@resp["serviceResult"]["itemName"]).strip
@upc = @resp["serviceResult"]["uPC"]
{:title => @title, :upc => @upc}
end
这可以按预期工作,但是我知道它可以更有效,因为ItemData.get_product_data()
每次调用该方法时都不调用该方法save_prod()
。ItemData.get_product_data()
如果产品已经存在,我如何添加新的产品数据而无需调用。