37

Rails 3.2を使用しています。フォームがあり、ajax経由で投稿して、コントローラーにjsonを返してもらいたいです。

私は次のようなform_forヘルパーを使用しています:

= form_for(@object, :remote => true, :format => :json) do |f|
....

私のオブジェクトコントローラのcreateメソッドは次のようになります。

  def create
    respond_to do |format|
      if @object.save
         format.html { redirect_to @object }
         format.json { render json: @object, status: :created, location: @object }
      else
        format.html { render action: "new" }
        format.json { render json: @object.errors, status: :unprocessable_entity }
      end
    end
  end

フォームは期待どおりにajaxlyに送信しています。しかし、コントローラーはjsonではなくhtmlを返しています!

firebugを使用してリクエストを検査し、ajaxリクエストのContent-Typehttpヘッダーがapplication/htmlに設定されていることを確認します。

これに関するドキュメントはかなりまばらです。:format =>:jsonは、フォームアクションに「.json」を追加するだけで、実際にはhttpヘッダーを変更しないようです。

また、:content_type =>:jsonを試しましたが効果はありません。

htmlを返したい場所が他にもあるので、コントローラーをハードコーディングしてjsonを返すことはできません...

では、form_forを使用するときにコントローラーにjsonをレンダリングするように指示する方法を知っている人はいますか?

助けてくれてありがとう

4

2 に答える 2

53

次のコマンドでコンテンツタイプを設定できます。

= form_for(@object、:remote => true、:html => {:'data-type' =>'json'})

rails.jsの106行目で説明されています。

于 2012-03-06T12:45:50.143 に答える
7

Rails 5の場合、適切な方法はデータ属性を設定することです data: { type: :json }

JQueryUJSドキュメント

于 2017-08-01T00:29:52.850 に答える