2012-02-28 174 views
1

我試圖創建兩個小按鈕具有向上和向下箭頭,根據我的產品類別。我有一個叫產品型號,並正在使用acts_as_list跟蹤的位置。創建自定義move_up路線和move_down動作/路由Rails的

難道我做這樣的事情在我的控制器來制定的路線?

resources :products 
post "products/move_up" 
post "products/move_down" 

,並在我的產品控制器

def move_up 
    @product.find(params[:id]) 
    @product.move_higher 
end 

def move_down 
    @product.find(params[:id]) 
    @product.move_lower 
end 

在我看來

<%= link_to "UP", products_move_up_path(product) %> 
<%= link_to "Down", products_move_down_path(product) %> 

但我不會做正確的事情。我不斷收到錯誤

無法找到ID產品= move_up

誰能幫我創建這條路線的關係?

編輯: 現在我得到的錯誤

你有一個零對象時,你沒想到吧! 您可能預期了Array的一個實例。而評估nil.find

這裏發生 錯誤是更多的代碼

查看代碼

<ul> 
<% item.children.each do |child| %> 
<li id='category_<%=child.id %>'> 
    <span><%= child.name %></span> 

    <% child.products.position.each do |product| %> 
    <br /><%= link_to "UP", move_up_product_path(product), method: :put %> | 
    <%= link_to "Down", move_down_product_path(product), method: :put %> ----------<%= product.position %> 
    <%= product.name %> 
    <%= link_to 'Edit', edit_product_path(product) %> 
    <%= link_to 'Delete', product, :method => :delete, :confirm => "Are you sure you want to delete this product?" %> <br /> 

    <% end %> 
    <%= render 'shared/children', :item => child unless child.leaf? %> 
    </li> 
<% end %> <br /> 
</ul> 

似乎代碼要在掛在這裏

def move_up 
    #Need to add a before filter to find product so I don't have to keep doing it. 
    @product.find(params[:product]) 
    @product.move_higher 
end 

當它執行查找。謝謝!

回答

4

所以,「上」和「下」真多更新的,所以你要使用「PUT」,還,你沒有正確定義你的路由。試試這個:

resources :products do 
    member do 
    put :move_up 
    put :move_down 
    end 
end 

應該創建你正在尋找的路由。

而且,你的鏈接需要執行:放,而不是一個:得到這是一個鏈接的默認操作。試試這個:

<%= link_to "UP", move_up_product_path(product), method: :put %> 

這應該爲你工作,檢查你的路線,你總是可以運行rake routes

希望這有助於只接受/上投如果是這樣!

Joe

+0

謝謝,這正是我一直在尋找的。現在,我得到一個零對象錯誤,我貼的代碼,如果你能幫助我明白這一點,以及 – ruevaughn 2012-02-28 23:48:25

+1

我想通了,@ product.find(PARAMS [:編號]),需要的是@product = Product.find( PARAMS [:ID]) – ruevaughn 2012-02-29 00:47:41