使用非休息操作进行路由

时间:2013-03-26 22:32:52

标签: ruby-on-rails ruby ruby-on-rails-3

我在控制器中为非restfull操作创建路径时遇到了一些问题,这是我的代码:

控制器:

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

但是当我在链接中使用路径时,我会得到此网址:http://example.com/groups/1/stores/toggle_store.2

我需要这样的东西: http://example.com/groups/1/stores/2/toggle_store

任何想法?

由于

编辑:

rake routes:

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 %>

1 个答案:

答案 0 :(得分:0)

好吧我修好了这个:

routes.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 %>