2017-02-25 46 views
3

我有一種情況,我需要在activeadmin中重寫create。我自動填充字段,如果數據已經存在,它應該更新,否則創建。這裏是我創造的方法:如何在覆蓋控制器後在activeadmin表單中顯示錯誤

def create 
     id = params[:company].dig(:id) 
     if id.present? 
     @company = Company.find(id) 
     if @company.update(permitted_params[:company]) 
      redirect_to resource_url 
      flash[:notice] = 'Company created successfully' 
     else 
      #add errors to semantic errors 
     end 
     else 
     new_permitted_params = permitted_params[:company].except(:id) 
     @company = Company.new(new_permitted_params) 
     @company.save 
     if @company.errors.any? 
      #add this to semantic errors so that activeadmin handles and displays the errors 
     end 
    end 
    end 

我想顯示其違反了驗證,使用戶知道,如果他/她已經進入無效輸入錯誤。我發現this但它看起來不僅僅是解決方案。請幫我解決這個問題。

在此先感謝。

回答

2

我在視圖中創建了一個名爲new.html.arb的新HTML文件,並在其中添加了insert_tag renderer_for(:new)。之後,我所做的只是

if @company.errors.any? 
    render 'new' 
end 

我通過查看activeadmin的默認行爲發現它。我希望這可以幫助那些想要做類似事情的人。這是我得到的結果,也是我需要的結果。

Fields with validation errors.

0

我不知道如果客戶端邏輯提交取決於id.present不同的網址嗎?可能會讓事情更加安寧。

+0

讓我給你解釋一下爲什麼我這麼做。我已經在此表單上應用了自動完成功能,並使用我收到的數據設置了所有字段。這就是邏輯起作用的地方。如果設置了ID(如果我沒有在自動完成時選擇一個對象,則不會這樣),然後更新否則創建。 – UsamaMan