Импорт CSV Rails 3 не сохраняется - PullRequest
0 голосов
/ 03 марта 2011

Я пытаюсь импортировать стандартный CSV-файл, и все, кажется, работает нормально, однако, это просто не сохраняет ...

Я пытаюсь импортировать в свой список клиентов, и контроллер моего клиента содержит:

require 'csv'

и

 def csv_import 
     @parsed_file=CSV::Reader.parse(params[:dump][:file])
     n=0
     @parsed_file.each do |row|
         c=Customer.new
         c.businessname=row[1]
         c.contactname=row[2]
         c.address1=row[3]
         if c.save
             n=n+1
             GC.start if n%50==0
         end
         flash.now[:message]="CSV Import Successful,  #{n} new records added to data base"
     end
 end

На странице индекса моего клиента я добавил следующее:

<%= form_for :csv_import, :html => { :multipart => true } do |f| -%>
 <table>
   <tr>
     <td>
      <label for="dump_file">
        Select a CSV File :
      </label>
     </td>
     <td >
      <%= f.file_field :file %>
     </td>
   </tr>
   <tr>
     <td colspan='2'>
        <%= f.submit "Upload", :disable_with => 'Uploading...' %>
     </td>
   </tr>
 </table>
<% end -%>

Когда я нажимаю кнопку загрузки, меня перенаправляют нана странице создания клиента, и я получаю сообщение об ошибке:

Business Name cannot be blank 

Как выглядит, что данные на самом деле не сохраняются?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 29 мая 2011

Я думаю, что ваши проверки препятствуют сохранению.В вашем контроллере вместо использования c.save попробуйте c.save(:validate => false).Дайте мне знать, как это работает.

0 голосов
/ 03 марта 2011

Я не верю, что ActiveRecord::Base.save что-то делает в Rails 3. Вам нужно использовать метод create.http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-create

@parsed_file.each do |row|
  Customer.create do |new_cust|
    new_cust.attribute_1 = row[1]
    new_cust.attribute2 = row[2]
    # etc...
  end
end

Как указано ниже, если вы получаете ожидаемые результаты и считаете, что ваш код верен, проверьте результаты анализа в irb.Введите следующий код в irb.

require 'csv'
path = "c:\path\to\file.csv"
CSV.foreach path do |row|
  puts row[0]
  puts row[1]
end

Если этот вывод выглядит так, как ожидалось, значит, проблема существует в другом месте вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...