Создать собственный маршрут move_up и действия move_down / маршрут Rails - PullRequest
2 голосов
/ 29 февраля 2012

Я пытаюсь создать две маленькие кнопки со стрелками вверх и вниз и сортировать мои продукты на основе этого.У меня есть модель под названием Product, и я использую act_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

Может ли кто-нибудь помочь мне создать это отношение маршрута?

РЕДАКТИРОВАТЬ : сейчасЯ получаю сообщение об ошибке

У вас есть нулевой объект, когда вы этого не ожидали!Возможно, вы ожидали экземпляр 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

Когда он выполняет поиск.Спасибо!

1 Ответ

4 голосов
/ 29 февраля 2012

Таким образом, «Вверх» и «Вниз» - это скорее обновление, поэтому вы захотите использовать «PUT», но вы также не будете правильно определять маршруты. Попробуйте это:

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

Который должен создать маршруты, которые вы ищете.

Кроме того, ваши ссылки должны выполнять: put вместо a: get, которое является действием по умолчанию для ссылки. Попробуйте это:

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

Это должно работать для вас, чтобы проверить ваши маршруты, вы всегда можете запустить rake routes

Надеюсь, это поможет, просто примите / увеличьте голосование, если это произойдет!

Джо

...