0

私は次のコントローラーを持っています(かなり基本的です)。

class ActivityTypesController < ApplicationController
  respond_to :html

  def show
    @model=ActivityType.find(params[:id])
    respond_with @model
  end

  def new
    @folder = Folder.find(params[:folder_id])
    @model = @folder.activity_types.build
    respond_with @folder, @model
  end

  def create
    @folder = Folder.find(params[:folder_id])
    @model = @folder.activity_types.build(params[:activity_type])

    if @model.save
      flash[:notice] = 'hoorraaaaayyy'
    end

    respond_with @folder, @model, location: root_path
  end

  def edit
    @folder = Folder.find(params[:folder_id])
    @model = ActivityType.find(params[:id])
    respond_with @folder, @model
  end

  def update
    @folder = Folder.find(params[:folder_id])
    @model = @folder.activity_types.find(params[:id])

    if @model.update_attributes(params[:activity_type])
      flash[:notice] = 'yeeeeaaaaaaah'
    end

    respond_with @folder, @model, location: root_path
  end

興味深いことに、アクション:location内のオプション#createは無視されますが、 では受け入れ#updateられます。

なぜそうなのか、私にはわかりません。さらに奇妙なことに、 :locationwithinを削除すると、ビューにリダイレクトするのではなく、アクション#createにとどまってビューをレンダリングするように見えます。#updateedit#show

この問題を追跡する方法を知っている人はいますか?

4

1 に答える 1

1

問題が見つかりました。

activity_types/create.html.hamlパーシャルのみをレンダリングするビューがありました_form.html.haml(これは、以前のクリーンでない実装の残りか、新規/作成アクション コンボの回避策のようです)。

respond_with常に最初に対応するビューをチェックするため、作成後、アクションと同じように見えるビューをレンダリングしましたcreate。したがって、このような問題に遭遇した場合も、他のアクションへのリダイレクトをedit妨げるビューがないことを確認してください。respond_to

ちなみに、リクエストのみを受け入れる場合は、 andアクションでの呼び出し:htmlのみが必要なため、エラーが発生したときにandフォームが自動的にレンダリングされます。ただし、JSON や XML などを提供して を使用する場合は、アクションにもが必要です(および呼び出しにデータで応答する必要があるその他のアクション)。respond_withcreateupdateneweditrespond_to :xmlrespond_with @my_model#showmy_action.xml

于 2012-11-20T12:16:15.223 に答える