2012-01-14 38 views
2

からのparamsを取得し、私はだから私は、新たな「アイテム」と私が達成したいを作成するには、このアクションでこのAJAX応答Railsの

def newitem 
    @Item = Item.new(:description => params[:description], :type_id => params[:type]) 
    if @Item.save 
    #Magic supposed to happen here 
    end 
    end 

などの「貢献」コントローラに新しいアクションを作成したが取得することですIDはAJAXレスポンスで作成されたアイテムから取得することができるので、「アイテム」が作成されたのと同じビューで使用できます。

第1問、作成したアイテムのパラメータをコントローラから戻すにはどうすればよいですか? 第2回私はAjaxリクエストを処理する方法を知っていますが、最初のリクエストに対するAjaxレスポンスをどのように処理するのですか...

おそらく私は解決策を考えていますが、 ありがとうございます。

答えて

1

これにはいくつかの方法があります。

def newItem 
    @Item = Item.create(:description => params[:description], :type_id => params[:type]) 
    render json: @Item 
end 

respond_doを使用してください:アプローチはRailsの3.1

コール(。HTMLレンダリングが非existantとなりますので、このアプローチは、JSONのAPIのみアプローチするのに便利です)、あなたの方法で直接レンダリングするためのもので、以下に説明しますブロック:

def newItem 
    @Item = Item.create(:description => params[:description], :type_id => params[:type]) 

    respond_to do |format| 
    if @Item.save 
     format.html { redirect_to @Item, notice: 'Item was successfully created.' } 
     format.json { render json: @Item, status: :created, location: @Item 
    else 
     format.html { render action: "new" } 
     format.json { render json: @Item.errors, status: :unprocessable_entity } 
    end 
    end 
end 

は、あなたのコントローラあなたが望む応答形式を教える:

class ContributionsController < ApplicationController 
    # Set response format json 
    respond_to :json 

    ... 

    def newItem 
    @Item = Item.create(:description => params[:description], :type_id => params[:type]) 
    respond_with @Item #=> /views/contributions/new_item.json.erb 
    end 

アイテムの検証の失敗を持っている場合は

は、あなたが戻ってIDを取得することはできません、またそれは、(HTTP応答コード以外の)失敗を報告します作成...「落とし穴」の可能性

に以下を追加します。あなたのモデル。それは猫の皮を剥ぐために複数の方法が常にあります

class Item < ActiveRecord::Base 

    ... 

    # includes any validation errors in serializable responses 
    def serializable_hash(options = {}) 
    options = { :methods => [:errors] }.merge(options ||= {}) 
    super options 
    end 

JSONレスポンスの中にハッシュエラーで検証失敗を含めます。私はこれが助けることを願っています