2012-02-28 159 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