2015-10-15 5 views
1

у меня есть это в моем контроллере: «4 вещей импортированных»Как подсчитать количество созданных записей?

def import 
    Model.import(params[:file]) if params[:file] 
    Model.create(model_params) if params[:model] 
    redirect_to root_url, notice: "Things imported." 
end 

Я хотел бы иметь возможность показать уведомление о том, например. Но я не знаю, как извлечь введенный счетчик записей из операции.

Есть ли встроенный способ найти это вне агностика базы данных?

+2

Вы можете разместить метод импорта, пожалуйста. По сути, вы должны использовать счетчик. –

+0

Вот что я в итоге сделал. Я скоро отправлю код – springloaded

+0

Не случайно ли это ['activerecord-import'] (https://github.com/zdennis/activerecord-import)? UPD: Я думаю, нет, аргументы, похоже, не совпадают. –

ответ

0

Это то, что я в конечном итоге делает:

# app/models/mymodel.rb 
class MyModel < ActiveRecord::Base 
    def self.import(csv_file) 
    create_count = 0 

    CSV.foreach(csv_file.path, headers: true) do |row| 
     Model.create! row.to_hash 
     create_count += 1 
    end 

    return create_count 
    end 
end 

# app/controllers/mycontroller.rb 
class MyController < ApplicationController 
    def import 
    begin 
     created_count = MyModel.import(params[:file]) 
     redirect_to root_url, notice: "#{created_count} things imported." 
    rescue 
     redirect_to root_url, error: "Couldn't import CSV file, nothing imported." 
    end 
    end 
end 

другой реализации, которые также, вероятно, работать:

# app/controllers/mycontroller.rb 
class MyController < ApplicationController 
    def import 
    begin 
     before_count = MyModel.count 
     MyModel.import(params[:file]) 
     after_count = MyModel.count 
     added_count = before_count - after_count 
     redirect_to root_url, notice: "#{added_count} things imported." 
    rescue 
     redirect_to root_url, error: "Couldn't import CSV file, nothing imported." 
    end 
    end 
end 
0

Есть два способа, которые можно использовать: size and count

  • Size для когда вы не загружены любые данные SQL в объект ActiveRecord
  • Count это когда вы имеют загруженную SQL данные в объект

Вы можете позвонить по телефону:

Model.count 

... чтобы получить количество записей в модели

+0

Это вернет общее количество записей в модели, а не только количество добавленных записей. – springloaded

0

Есть на самом деле 3 способа получения этой информации: length, count и size

collection.count

  • Подсчет количества элементов по SQL-запросу (SELECT COUNT (*) FROM ...)
  • count Результаты не сохраняются в памяти. Это означает, что каждый раз, когда вы называете это methis, он будет выдавать новый запрос!

    collection = Record.all.count #> SELECT COUNT(*) FROM `records` 
    

collection.length

  • Возвращает длину коллекции из памяти, если загружен жадно
  • Коллекция должна находиться в памяти для этого, чтобы работать

    collection = Record.all.length #> Record Load (122.9ms) SELECT `records`.* FROM `records` 
    

сборник.Размер

  • Это метод Rails
  • Этот метод сочетает в себе оба метода выше (count и length)
  • Если коллекция находится в памяти, он получит длину
  • Если коллекция не в памяти, он будет выполнить запрос SQL и count это

    collection = Record.all 
    collection.count # > SELECT COUNT(*) FROM `records` 
    collection.count # > SELECT COUNT(*) FROM `records` 
    collection.size # > SELECT COUNT(*) FROM `records` 
    collection.to_a.size # > Record Load SELECT `records`.* FROM `records` 
    
+0

Это вернет общее количество записей, я искал только количество добавленных записей. – springloaded

+0

Ага, спасибо за разъяснение. Я оставлю это здесь, если кто-то наткнется на него. –

Смежные вопросы