2012-02-28 10 views
1

上向き矢印と下向き矢印の2つの小さなボタンを作成しようとしています。私はProductというモデルを持っており、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

は、誰も私がこのルート関係を作成するのに役立つことはできますか?

EDIT:あなたはそれを期待していなかったとき は今、私はあなたがnilオブジェクトを持っているエラー

を取得しています! 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 

にハングアップしているように見えるコードですそれはfindを実行します。ありがとう!

答えて

4

「Up」と「Down」は本当にアップデートされているので、「PUT」を使用したいだけでなく、ルートを正しく定義していないとします。これを試してください:

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

あなたが探しているルートを作成する必要があります。

また、あなたのリンクは:aの代わりに:putを実行する必要があります:getは、リンクのデフォルトアクションです。これを試してください:あなたのルートを確認するために、あなたのために働く必要があります

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

あなたは常にこのことができますrake routes

希望を実行することができ、それがない場合は、単に/アップ票を受け入れます!

ジョー

+0

おかげで、私が探していたものがありました。今ではオブジェクトエラーが発生していますが、コードを投稿してもそれを把握できたら – ruevaughn

+1

私はそれを理解しました。@ product.find(params [:id])は@product = Product.find params [:id]) – ruevaughn

関連する問題