我是 Rails 新手,想回答一个问题:
我的表单上有一个上传 csv 字段,当我实际上传文件时它工作得很好。但是当我在没有附加文件的情况下点击上传按钮时,出现异常:nil:NilClass 的未定义方法“[]”。有没有办法留在同一页面上,而是显示“未上传文件”警告?
我试过做if(params[:model][:file].nil?) redirect_to model_path end
,但它继续到代码的其余部分。在此先感谢您的帮助。
查看代码:
<%= form_for (@model), :url=>{ :controller=>"models", :action => 'create'}, :html=>{:multipart => true} do |f| %>
<p><%= f.label :file, 'Import csv file' %><br/>
<%= f.file_field :file, :accept => "text/csv"%></p>
<%= submit_tag "Upload" %>
<% end %>
Controller Code:
def create
51 @model = Model.new
52
53 @model.date_created = Time.now.utc
54
55
56 #handles csv input
59 if(params[:model][:file])
60
61 @model.id = SecureRandom.uuid;
62 file_data = params[:model][:file].read
63 @parsed_file = CSV.parse(file_data)
64 n=0
65 @parsed_file.each do |row|
74
75 if @model.save
76 n=n+1
77 end
79 end
81 else
82 @model.id = "different type"
83 end
84
85 respond_to do |format|
86 if @model.save
87 if(params[:model][:file] )
88 format.html { redirect_to @model, :notice => "Successfully imported the CSV file. #{n} new records added to the database" }
89 else
90 format.html { redirect_to @model, notice: 'Model entry was successfully created.' }
91 end
92 format.json { render json: @model, status: :created, location: @model }
93 else
94 format.html { render action: "new" }
95 format.json { render json: @model.errors, status: :unprocessable_entity }
96 end