Rails 4.1 7 Mongoid Activerecord автоматически сохраняет без вызова.save

Позвольте мне сначала объяснить структуру моей модели:

у меня есть модель состояния:

class Status
  include Mongoid::Document
  include Mongoid::Search
  include Mongoid::Timestamps

  field :status_code, type: Integer
  field :status_description, type: String

  validates :status_code, :status_description, :transactiontype, :presence => true

  belongs_to :transactiontype, :class_name => 'Transactiontype'
  has_many :transactions, :class_name => 'Transaction', autosave: false

  search_in :status_code, :status_description, :transactiontype => :transaction

  def self.getStatus(transactiontype)
    statuses = Status.where(:transactiontype_id => transactiontype).all

    stats = []
    puts "DATE DASHBOARD: #{Time.now.beginning_of_day} to #{Time.now.end_of_day}"
    statuses.each do |status|
      transactions = status.transactions.dateRange(Date.today.beginning_of_day, Date.today.end_of_day)
      if transactions.length > 0
        status.transactions = transactions
        stats.push(status)
      end
    end
    puts "SIZE : #{stats.size}"
    stats
  end

  etc..

end

тогда у меня есть другая модель под названием транзакции:

class Transaction
  include Mongoid::Document
  include Mongoid::Search
  include Mongoid::Timestamps
  field :ref_no, type: String
  field :trans_date, type: DateTime

  belongs_to :status, :class_name => 'Status'
  belongs_to :transactiontype, :class_name => 'Transactiontype'

  validates :ref_no, :trans_date, :status, :presence => true
  def self.dateRange(startdate,enddate)
    puts "DATE : #{startdate} to #{enddate}"
    if !startdate.blank?
      where(:created_at => {"$gt" => startdate.beginning_of_day, "$lt" => enddate.end_of_day})
      # where(:trans_date.gte => startdate.beginning_of_day, :trans_date.lte => enddate.end_of_day)
    end
  end

  etc..

end

странная часть в том, что:

когда я пытаюсь выполнить:

Status.getStatus(params[:transactiontype_id])

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

я уже пытался добавить автосохранение: ложь, но ничего не работает

Может кто-то помочь мне с этим?

1 ответ

Решение

Решение состоит в том, чтобы сначала преобразовать активную запись в json

def self.getStatus(transactiontype)
    statuses = Status.where(:transactiontype_id => transactiontype).all

    stats = []
    puts "DATE DASHBOARD: #{Time.now.beginning_of_day} to #{Time.now.end_of_day}"
    statuses.each do |status|
      ar_status = status.as_json
      ar_status['transactions'] = status.transactions.dateRange(Date.today.beginning_of_day, Date.today.end_of_day)
      if ar_status['transactions'].length > 0
        stats.push(ar_status)
      end
    end
    puts "SIZE : #{stats.size}"
    stats
  end

по какой-то причине.. его автоматическое сохранение записей.

Другие вопросы по тегам