Я пытаюсь выяснить, как переключить действие «закончить» с помощью вложенных ресурсов в рельсы. По какой-то причине я не могу заставить его делать то, что я хочу. Я продолжаю получать «Не могу найти список без идентификатора». Это имеет смысл, но я не могу настроить его так, чтобы он работал. Любопытно, если кто-нибудь знает, как настроить вещи, чтобы заставить это функционировать должным образом. Я предполагаю, что это, вероятно, имеет какое-то отношение к моему файлу маршрутов или к каждому блоку, может быть? в частичном. Благодарю.Rails JQUERY Toggle with Nested Resources
Код ниже.
Книги Контроллер
def finish
@list = List.find(params[:list_id])
@book = @list.books.find(params[:id])
@book.update(finished: true)
respond_to do |format|
format.html {redirect_to list_path(@list)}
format.js {}
render @list
end
end
def unfinish
@list = List.find(params[:list_id])
@book = @list.books.find(params[:id])
@book.update(finished: false)
respond_to do |format|
format.html {redirect_to list_path(@list)}
format.js {}
render @list
end
end
Книги Частичные
<table class="table table-hover">
<thead>
<tr>
<th>Title</th>
<th>Author</th>
<th>Pages</th>
<th>Did you finish the book?</th>
<th>Remove book from list</th>
</tr>
</thead>
<tbody>
<% @books.each do |book| %>
<tr>
<td><%=book.name %></td>
<td><%=book.author %></td>
<td><%=book.pages %></td>
<% if book.finished? %>
<td class="unfinish-book"><%=link_to 'Finished', unfinish_book_path(book), :method => :put, remote: true %></td>
<% else %>
<td class="finish-book"><%=link_to 'Mark as Finished', finish_book_path(book), :method => :put, remote: true %></td>
<% end %>
<td class><%= link_to '|Remove Book|', list_book_path(@list, book), method: :delete, data: { confirm: 'Are you sure?'} %></td>
<% end %>
</tr>
</tbody>
</table>
Маршруты
Rails.application.routes.draw do
root 'lists#index'
resources :lists do
resources :books
end
resources :books do
member do
put :finish
put :unfinish
end
end
end
Для чего вам не нужно создавать специальный метод для этого. Просто передайте свои атрибуты в ссылку 'put/patch' на обычный' update' ваш контроллер, и он будет работать. –
Спасибо за совет. Я вернулся в это приложение после того, как уехал некоторое время. Не могу честно вспомнить, почему я сделал это так, как сделал. –