我想讓人們直接更新記錄,如果他們知道ID或放在名稱/地址類型的信息,它會找到正確的記錄或創建一個新的記錄,如果它不存在。我該如何做一個由ID查找,如果它存在,否則做一個find_or_initialize_by_columname(PARAMS [:somevalue])
@donor = Donor.find_or_initialize_by_company_and_prefix1_and_first_name1_and_last_name1_and_address1(params[:donor])
就好了,只要輸入的記錄包含了所有必要的列(它將如果我在通過CSV文件讀取這些信息。)
上述作品,但現在我會喜歡提供僅包含一個ID的選項,如果它存在於數據庫中,則使用該選項。如果沒有,我會運行上述語句來查找這些列或創建一條新記錄。
我的控制器如下:
def create
# need to find donor by id if given, else use find_or_create_by_blahblahblah
@donor = Donor.find_or_initialize_by_company_and_prefix1_and_first_name1_and_last_name1_and_address1(params[:donor])
if @donor.new_record?
@donor.save
respond_to do |format|
if @donor.save
format.html { redirect_to @donor, notice: 'Donor was successfully created.' }
format.json { render json: @donor, status: :created, location: @donor }
else
format.html { render action: "new" }
format.json { render json: @donor.errors, status: :unprocessable_entity }
end
end
else
respond_to do |format|
if @donor.save
format.html { redirect_to @donor, notice: 'Donor already exists. Please edit donor if needed.'}
format.json { render json: @donor, status: :created, location: @donor }
else
format.html { render action: "new" }
format.json { render json: @donor.errors, status: :unprocessable_entity }
end
end
end
end
我無法找到如果一個ID提供給檢查它做什麼。
我想是這樣的:
@donor = Donor.find_by_id(params[:donor])
if [email protected]
@donor = Donor.find_or_initialize_by_all_those_columns(params[:donor])
end
,但是這給了我,如果我把數據,比方說一個錯誤,該公司現場,而不是隻ID字段。
我確信有一個很好的方法可以做到這一點,我只是還沒有看到。任何幫助,將不勝感激。
我創建了一個gem,它有助於這個名爲'find_by_hash':http://github.com/radar/find_by_hash。 –