如何将csv上传到模型,验证另一个模型中存在的字段

时间:2016-04-29 20:19:13

标签: ruby-on-rails validation csv model

我在rails 4.2.6工作,我有两个模型 - 一个"项目",一个"捐赠者"。我有csv上传两个都很好。 "项目"包含一个名为" donor"的字段,当我上传项目csv时,我想验证"捐赠者"该csv中的值存在于"捐赠者"我和捐赠者的领域"模型。 (对不起,让模型和专栏命名非常相似有点令人困惑)无论如何,我在project.rb这里,显然它是错的,我只是不确定如何将验证连接到另一个模型。

class Project < ActiveRecord::Base
 validates :donor, presence: true


  def self.import(file)
   CSV.foreach(file.path, headers: true) do |row|
    Project.create! row.to_hash
   end
  end
 end

更新: 我现在在这里,觉得我越来越近了,但还没到那里......

class Project < ActiveRecord::Base
validate :validate_donor

  def validate_donor
    if Donors.find_by_donor(donor) == nil
      errors.add(:base, "Donor false")
    end

  def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
      Project.create! row.to_hash
    end

  end
end

1 个答案:

答案 0 :(得分:1)

一些事情:

    您在validate_donor中的
  • 似乎错过了end
  • 对于单行条件,我会将其简化为errors.add(etc) unless Donors.find_by_donor

最后,我只在控制器中完成此操作,但常见的辅助方法(例如对于current_user)可能如下所示:

def validate_donor
  @donor = Donors.find_by_donor(donor)
  errors.add(etc) unless @donor
end

这个方法会给你一个@donor属性来保存,或者给你的对象添加一个错误(我想 - 我有点生疏)。