1

ajaxフォームで失敗した投稿のエラーメッセージを表示しようとしています。私は前にajaxフォームのパスを行っていないし、フォームが何らかの理由でデータを保存できないときにエラーメッセージを表示する方法についての最新のガイドを見つけることができません。Railsでjsonフォームのエラーメッセージをレンダリングする方法

以下に示すように、失敗したフォーム送信のコントローラにはformat.json { render :json => { :errors => @key.errors.full_messages }, :status => 422 }があります。しかし、私はJSやcoffeescriptにどのようなエラーメッセージが表示されるのか分からない。

category_item_keysコントローラ

def new 
    @guide  = Guide.friendly.find params[:guide_id] 
    @category = Category.friendly.find params[:category_id] 
    @key  = @category.category_item_keys.new 
end 


def create 

    @guide  = Guide.friendly.find params[:guide_id] 
    @key  = @category.category_item_keys.new key_params 
    @category = Category.friendly.find params[:category_id] 


if @key.save 

    CategoryItemKey.find(@key.id).update(submitted_by: current_user.id, approved_by: current_user.id, guide_id: @guide.id) 

    respond_to do |format| 

    format.html { redirect_to new_guide_category_category_item_key_path(@guide, @category) 
       flash[:success] = "Key added successfully!" } 

    format.json { render :json } 
    format.js 

    end 

else 
    respond_to do |format| 
     format.html { render 'new' } 
     format.json { render :json => { :errors => @key.errors.full_messages }, :status => 422 } 
    format.js 
    end 
end 

end 

def key_params 
    params.require(:category_item_key).permit(:name, :key_type) 
end 

new.html.erb

<%= form_for([@guide, @category, @key], url: guide_category_category_item_keys_path, remote: true, :authenticity_token => true) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 

    <%= f.label :name, "Key name" %> 
    <%= f.text_field :name %> 

    <%= f.select :key_type, [['Stat', 1], ['Attribute', 2], ['Image', 3], ['Text', 4]] %> 

    <%= f.submit "Next" %> 
<% end %> 

category_item_key.coffee

# No idea what is needed in here 

私は私が必要なものを見るために見つけることができるすべての記事の上に読みましたcategory_item_key.coffeeに入ることができますが、それらはすべて3-5歳で、ちょうどうまくいきません。私はそれが複雑ではないと確信していますが、私はそれを働かせるためにJSについて知りません。

答えて

1

category_item_keysコントローラ:

<%= render 'save' %> 
+0

おかげupdate.js.erb

format.json { render :json => @key.errors, :status => 422 } 

_save.js.erb

<% if @key.errors.any? %> $("<%= j(render 'shared/error_messages') %> ").prependTo('#YoursFormId'); <% else %> // do something when no errors <% end %> 

create.js.erb、あなたはもう少しを提供することができます詳細は? new.html.erbに入る必要があるようなものです。私はファイルを追加し、コントローラ内の行を変更し、何もしません – Rob

関連する問題