Ruby on rails Rails在XML中访问数据-未定义的方法
我正在尝试使用位于以下位置的“Magento rb”库将产品从Magento商店下载到我的Rails数据库中: 我尝试了以下代码:Ruby on rails Rails在XML中访问数据-未定义的方法,ruby-on-rails,ruby,magento,Ruby On Rails,Ruby,Magento,我正在尝试使用位于以下位置的“Magento rb”库将产品从Magento商店下载到我的Rails数据库中: 我尝试了以下代码: xml_api = Magento::XmlApi.new "http://website.com/api/xmlrpc/", "myusername", "mypassword", :debug => true products = xml_api.call("catalog_product.list") products.each do |p| @
xml_api = Magento::XmlApi.new "http://website.com/api/xmlrpc/", "myusername", "mypassword", :debug => true
products = xml_api.call("catalog_product.list")
products.each do |p|
@exists = Product.where("sku = ?",p["sku"])
if @exists
@product = Product.find_by_sku(p["sku"])
else
@product = Product.new
end
@product.sku = p["sku"]
@product.name = p["name"]
@product.mage_product_id = p["product_id"]
@product.save
end
不幸的是,我遇到了以下错误:
NoMethodError in Admin::ProductsController#test
undefined method `sku=' for nil:NilClass
我应该注意到,我已经确认“sku”确实是产品模型的一个属性,并且我还尝试重置服务器。有什么想法吗?您编写代码的方式,
@exists
始终是true
,因此即使sku不存在,where()方法也会返回一个空数组,在ruby中计算结果为true
ruby中唯一计算为false的值是false
和nil
这就是为什么当您使用Product.find\u by_sku
时,它会返回nil
,因为sku不存在,这就是为什么您会得到错误未定义的方法sku=for nil:NilClass
这就像你在写nil.sku=p['sku']
,这是行不通的
要检查数据库中是否存在记录,最好使用“exists”方法:
if Product.exists?(["sku = ?",p["sku"]])
# product exists
else
# product doesn't exist
end
实际上,您可以跳过额外的记录检查,只使用find_by_sku方法来检查记录是否存在,如果同时存在,则获取该记录。下面的代码做了同样的事情,但它更像“ruby”:
来自敖德克的你好!你需要添加。首先在where之后打电话,然后它就可以工作了。之后,您可以适当地重构代码。
@product = Product.find_by_sku(p['sku'])
@product = Product.new unless @product
@product.sku = p['sku'] # this is unnecessary
@product.name = p['name']
@product.mage_product_id = p['product_id']
@product.save