Как найти и назначить существующего клиента для выставления счета - PullRequest
0 голосов
/ 26 февраля 2020

Привет, у меня есть 2 модели Customer и Invoice, Customer имеет 2 поля name и email, а Счет-фактура также имеет 2 поля name и amount.

Customer has_many invoices

Invoice belongs_to customer

Я создал метод импорта:

  def self.import(file)
    CSV.foreach(file.path, headers:true, skip_lines: /^(?:,\s*)+$|\b(\w*Total\w*)\b/) do |row|      
      Invoice.create! row.to_hash
    end
  end

можно ли проверить, существует ли customer.name == invoice.name и имеет ли значение true, чтобы получить customer_id и сохраните его. Спасибо

1 Ответ

0 голосов
/ 26 февраля 2020

Предполагая, что поле name уникально в таблицах customer и invoice, вы можете сделать следующее -

В вашей модели invoice сделать belongs_to необязательным - belongs_to :customer, optional: true

def self.import(file)
  CSV.foreach(file.path, headers:true, skip_lines: /^(?:,\s*)+$|\b(\w*Total\w*)\b/) do |row|
    row = row.to_hash      
    invoice = Invoice.new(row)
    customer = Customer.find_by(name: row['name'])
    invoice.customer = customer if customer.present?
    invoice.save!
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...