gpt4 book ai didi

ruby-on-rails - 在 Rails 中导入不成功的 CSV 时显示 flash

转载 作者:数据小太阳 更新时间:2023-10-29 09:01:33 25 4
gpt4 key购买 nike

我的 Rails 应用程序中有一个有效的 CSV 导入功能。

Item.rb

 #CSV Import Function
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Item.create! row.to_hash
end
end

items_controller.rb

def import
current_user.items.import(params[:file])
flash[:success] = "Import Successful"
redirect_to spage3_path
end

这对我来说效果很好。但是,当导入不成功时(我对 Item 模型的某些字段进行了一些验证)应用程序崩溃。在这种情况下,我只想向用户显示一个 flash[:danger]。为此,这就是我修改 Controller 的方式,但现在每次我都得到 flash[:danger]

items_controller.rb

def import
if current_user.items.import(params[:file])
flash[:success] = "Import Successful"
redirect_to spage3_path
else
flash[:danger] = "Error Encountered"
redirect_to spage3_path
end
end

请指教我在哪里弄错了。谢谢

最佳答案

.create! 如果对象验证失败则引发异常。您必须处理这种情况以避免应用程序崩溃。您可以在保存之前简单地检查对象是否有效。

  • 如果有效:保存并继续解析您的 CSV
  • 如果无效:返回false并停止解析CSV

一个想法可以是:

项目.rb

 #CSV Import Function
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
item = Item.new(row.to_hash)
# exit from the block it item is not valid
return false unless item.valid?

# save the item only if is valid
item.save
end
end

使用这种方法,您可以让您的 Controller 保持原样。

items_controller.rb

def import
if current_user.items.import(params[:file])
flash[:success] = "Import Successful"
redirect_to spage3_path
else # when return false show flash[:danger] to the user
flash[:danger] = "Error Encountered"
redirect_to spage3_path
end
end

关于ruby-on-rails - 在 Rails 中导入不成功的 CSV 时显示 flash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34249617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com