0

コントローラーでレストフルでないアクションのルートを作成するのに問題があります。コードは次のとおりです。

コントローラ:

class StoresController < ApplicationController

  def toggle_store
    @store=Store.find(params[:store])
    if @store.available==true
      @store.update_attribute(:available, false)
    else
      @store.update_attribute(:available, true)
    end
    redirect_to @store
  end

end

ルート:

  resources :groups do
    resources :stores do
      member do
        post :toggle_store
      end
    end
  end

しかし、リンクでパスを使用すると、次のURLが表示されます:http ://example.com/groups/1/stores/toggle_store.2

そして私はこのようなものが必要です: http ://example.com/groups/1/stores/2/toggle_store

何か案は?

ありがとう

編集:

レーキルート:

toggle_store_group_store POST   /groups/:group_id/stores/:id/toggle_store(.:format) stores#toggle_store

リンク:

<%=link_to "toggle", toggle_store_group_stores_path(@group,store), :method => :post %>
4

1 に答える 1

0

わかりました、私はそれをこのように修正しました:

ルート.rb:

  resources :groups do
    resources :stores do
      post :toggle_store      
    end
  end

コントローラ:

  def toggle_store
    authorize! :toggle, :store
    @store=Store.find(params[:store_id])
    if @store.available==true
      @store.update_attribute(:available, false)
    else
      @store.update_attribute(:available, true)
    end
    redirect_to @group
  end

リンク:

<%=link_to "to", toggle_store_group_store_path(@group,store), :method => :post %>
于 2013-03-26T23:00:36.483 に答える