Ruby on rails 如何查找现有客户并将其分配给发票

Ruby on rails 如何查找现有客户并将其分配给发票,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,您好,我有两个型号客户和发票,客户有两个字段名称和电子邮件,发票也有两个字段名称和金额 客户有多张发票 发票属于客户 我创建了一个导入方法: 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 是否可以检

您好,我有两个型号
客户
发票
客户
有两个字段
名称
电子邮件
,发票也有两个字段
名称
金额

客户有多张发票

发票属于客户

我创建了一个导入方法:

  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\u id
并保存它。
谢谢

假设
名称
字段在
客户
发票
表中都是唯一的,您可以执行以下操作-

在您的
发票
型号中,make
归属于
可选-
归属于:客户,可选:真

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

按照您的要求做很容易,但我认为您的
customer.name
不会是customer表中唯一的字段。因此,要找到客户,你应该使用一些独特的密钥。它们是独特的,客户是公司。我创建的客户(公司)的名称和电子邮件和发票的名称基本上是客户的名字。我知道客户存在且名称相同。我正在尝试根据名称获取关联,并在创建发票时保存客户id。我获取此验证失败:客户必须存在。在发票表中不是唯一的一个客户有多个发票现在它可以工作,但表中没有客户id所有都是空的,您必须将数据添加到表中。我猜这就是您想要的行为
Invoice Create(0.2ms)插入“invoices”(“name”、“num”、“date”、“amount”、“created_at”、“updated_at”)值($1、$2、$3、$4、$5、$6)返回“id”[[“name”、“AMINGST LTD_Giovanni Cigala”]、[“num”、“190708_89”]、[“date”、“2019-07-08”]、[“amount”、1825.0]、“created_at”,“2020-02-26 12:21:16.897396”],[“更新时间”,“2020-02-26 12:21:16.897396”]
看起来客户id根本没有通过
客户加载(0.1ms)选择“客户”。*从“客户”中选择“客户”。“名称”为空限制$1[“限制”,1]]
能否检查数据库中是否存在与发票名称同名的客户?