2

上矢印と下矢印の付いた 2 つの小さなボタンを作成し、それに基づいて製品を並べ替えようとしています。Product というモデルがあり、acts_as_list を使用して位置を追跡しています。

ルートを作成するためにコントローラーでこのようなことをしますか?

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 の製品が見つかりませんでした

このルート関係の作成を手伝ってくれる人はいますか?

編集:今、私はエラーが発生しています

予期していなかったのに 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

検索を実行するとき。ありがとう!

4

1 に答える 1

4

したがって、「Up」と「Down」は実際には更新のようなものなので、「PUT」を使用する必要がありますが、ルートを正しく定義していません。これを試して:

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

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

また、リンクは、リンクのデフォルトのアクションである:getではなく、:putを実行する必要があります。これを試して:

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

それはあなたのために働くはずです、あなたがいつも走ることができるあなたのルートをチェックするためにrake routes

これがお役に立てば幸いです。もしそうなら、投票を受け入れる/賛成してください!

ジョー

于 2012-02-28T23:28:54.017 に答える