我是Ruby on Rails的初学者,对于这个愚蠢的问题感到抱歉,但我整天都在搜索它并仍然坚持:(
我有一个模型方法将文件excel从计算机导入到web,第一行包含表列,其他下一行有记录集保存到数据库。如果它可以将所有记录保存到db,我试图返回true,否则为false,如下所示:
模型
def self.import(file)
spreadsheet = open_spreadsheet(file) //another method to read file
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
item= find_by_id(row["id"]) || new
item.attributes = row.to_hash.slice(*accessible_attributes)
if item.invalid?{
return false;
break
}
else item.save end
end
end
并在控制器:
中调用它 def save
if (Item.import(params[:file]))
redirect_to import_items_path, notice: t("success")
else redirect_to import_items_path, notice: t("fails")
end
end
但是当我导入
时它没有返回true / false(总是设置为flash.notice的“成功”)我已经将它称为像这样的变量
@test = Item.import(params[:file])
并将其发送到flash.notice并发现该方法总是返回一个像这样的字符串
“2..xx”(xx是文件中的行数)
我做了些什么奇怪的电话??? Plz帮助我...为任何回答而言第一次
答案 0 :(得分:1)
如果未遇到无效import
,则true
方法不会返回items
。
要解决此问题,请替换:
if item.invalid?{
return false;
break
}
else taisan.save end
end
end
使用:
return false if item.invalid?
taisan.save
end
true
end
如果遇到无效的false
会立即返回item
,否则会true
。
顺便说一句,您可以像这样保留save
函数dry:
def save
message = if Item.import(params[:file])
"success"
else
"failure"
end
redirect_to import_items_path, notice: t(message)
end