2016-04-29 40 views
1

首先,我是一個新手。所以如果我不熟悉這個術語,請和我一起裸照。Ruby on Rails將csv上傳到模型,驗證另一個模型中是否存在字段

我正在使用rails 4.2.6,我有兩個模型 - 一個「項目」,一個「捐助者」。我有兩個csv上傳工作正常。 「項目」包含一個名爲「捐助者」的字段,當我上傳項目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

有幾件事情:

  • 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屬性來保存但是或者添加一個錯誤給你的對象(我想 - 我有點生疏)。

+0

非常感謝。添加一個結束固定它..d'oh! – bwatson30

相關問題