2013-03-26 76 views
0

有一些麻煩,創造了在我的控制我的非REST類型的行動路線IM,這裏是我的代碼:路由與非休息行動

控制器:

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

有什麼想法嗎?

感謝

編輯:

耙路線:

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

你如何創建你的路徑?請同時複製'rake routes'的一部分輸出。 – 2013-03-26 22:35:21

+0

完成後,我添加了耙路和我如何鏈接它 – 2013-03-26 22:38:17

回答

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

好吧,很高興你解決了它,但不知道你的問題是什麼,因爲在我的機器上一切正常。注意:不應該使用帶'link_to'方法的':method =>:post',因爲當用戶在新標籤頁/窗口中打開此鏈接時,方法屬性會丟失,並且鏈接將作爲得到請求。考慮使用'button_to'或其他東西。 – 2013-03-27 08:20:55

+0

順便說一句,有一個切換!方法來切換和存儲屬性:@ store.toggle!(:available)。至少你應該擺脫如下類似的東西:@ store.update_attribute(:available,[email protected]) – 2013-07-13 06:30:53