2013-01-22 152 views
2

我試圖做驗證,但因此未找到合適的方式,同時上傳了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

需要一些關於您的問題的更多說明......你在你的模型中寫了什麼? – Siddharth

回答

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 

在模型:

高清self.import(文件)

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 

並稱之爲閃光消息......並且現在正常工作。

謝謝

1

我想在你的控制器的某個地方,你必須用你的表單數據在Person模型的新實例上調用.validate。您可以將該模型保存在可替換(-----)的實例變量中。