我正在尝试进行验证,但在上传excel时找不到正确的方法
视图代码
<%= form_for :dump, :url=> import_csv_index_path, :html => { :multipart => true } do |f| %>
<% if (-----).errors.any? %>
<div id="error_explanation">
<%= pluralize((----).errors.count, "error") %> prohibited this link from being saved:
<% (---).errors.full_messages.each do |msg| %>
<li><%= msg %></li>
</div>
<% end %>
<%= f.label :'Select an Excel File:' %>
<%= f.file_field :file %>
<i href="#" id="blob_1" class="icon-info-sign" rel="popover" style="margin-top: 300px"></i><br/>
<%= submit_tag 'Submit' ,:id => 'submit',:class =>"btn btn-primary"%><br/><br/>
<% end -%>
型号代码:
class Person < ActiveRecord::Base
attr_accessible :date, :email, :name, :avatar ,:template_id
validates_presence_of :email,:message => 'Email is compulsory'
end
我在(-----)
的地方写些什么谢谢
答案 0 :(得分:2)
我已经完成了另一种方法,所以在这里讨论,
控制器代码:
def import
@error = []
@error = Person.import(params[:dump][:file])
redirect_to people_path, notice: "Employees imported.",:flash => { :error => "Employees( Email : invalid/blank) are not saved : #{@error.join(" , ")}" }
end
模特:
def self.import(file)
spreadsheet = open_spreadsheet(file)
@err = []
@alt = []
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
@person = Person.find_by_id(row["id"]) ||Person.new
@person.name = row["Name"].to_s
@person.date = row["Date"]
@person.email = row["Email"]
if @person.save
else
@err << {:name => row["Name"].to_s,:error => @person.errors.messages}
end
end
@err.each do |t|
@alt.push(t[:name])
end
return @alt
end
并将其称为Flash消息...并且现在正常工作。
由于
答案 1 :(得分:1)
我认为您控制器中的某个位置必须使用表单的数据在.validate
模型的新实例上调用Person
。您可以将该模型保存在可以代替(-----)
。