rails create方法,返回bool值

时间:2013-04-27 09:24:42

标签: ruby-on-rails methods import return-value

我是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帮助我...为任何回答而言第一次

1 个答案:

答案 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函数

def save
  message = if Item.import(params[:file])
              "success"
            else
              "failure"
            end

  redirect_to import_items_path, notice: t(message)
end