验证形式?

时间:2013-01-22 13:12:47

标签: ruby-on-rails ruby ruby-on-rails-3.1 ruby-on-rails-3.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

我在(-----)

的地方写些什么

谢谢

2 个答案:

答案 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。您可以将该模型保存在可以代替(-----)

的实例变量中