0

コントローラーにロールバックというアクションを追加しようとしています。私が見たように、私がすべきことは新しいアクションを書くことだけです:

def rollback
    puts "ROLLBACK!"
    respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @components }
end

routes.rb ファイルを変更します。

resources :components do
   collection do
      post :rollback, :as => 'rollback'
   end
end

そして、いくつかのビューからアクションを呼び出します:

<%= link_to 'Rollback', rollback_components_path %>

しかし、次のエラーが表示されます。

Couldn't find Component with id=rollback
app/controllers/components_controller.rb:18:in `show'

これは、ロールバック アクションに進む代わりに、ID が「ロールバック」のコンポーネントに「表示」しようとしているとコントローラーが判断するためです。

私にとって奇妙に思えるのは、「新しい」アクションレールを呼び出すとnew_component_path(sなし、単数形)が使用されることですが、rollback_component_pathと書くとエラーが発生し、ビューが表示されません。

4

2 に答える 2

1

これはうまくいくでしょう

ルート.rb

resources :components
match "components/rollback" => "components#rollback",  :as => :rollback

ビューで

<%=link_to 'Rollback', rollback_path%>
于 2012-11-16T09:47:57.090 に答える
1

ルートでは が必要です。POSTリンクをクリックするだけで、デフォルトではGETになります。

resources :components do
  collection do
    get :rollback
  end
end

その後、link_to期待どおりに動作します。

ロールバック操作はべき等ではないと想定しているため、POSTその場合は意味的に a の方が優れています。

次のようにリンクを記述すると、Rails によってインライン フォームが作成されます。

link_to 'Rollback', rollback_components_path, :method => 'post'

お役に立てれば。

于 2012-11-16T09:41:27.557 に答える