2017-02-25 8 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に応じて、異なるURLに提出するのだろうか?物事をより穏やかにするかもしれない。

+0

私はあなたがなぜこれをやったのか説明しましょう。私はこのフォームでオートコンプリートを適用しました。私は受け取っているデータですべてのフィールドを設定しています。それで、それがロジックが作用する場所です。 IDが設定されている場合(自動完成時にオブジェクトを選択しなかった場合は表示されません)、それ以外の場合は更新が作成されます。 – UsamaMan

関連する問題