Rails的JQUERY切换嵌套资源

我试图找出如何在rails中嵌入资源来切换“完成”操作。 无论出于什么原因,我都无法做到我想做的事。 我不断收到'找不到没有ID的列表'。 这是有道理的,但我不能配置它,所以它会工作。 很好奇,如果有人知道如何配置的东西,以使其正常工作。 我假设它可能与我的路线文件有关或每个块可能? 在部分。 谢谢。

代码如下。

书籍控制器

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

如果您查看您的rake routes输出,那么您将看到以下完成/未完成路线:

  finish_book PUT    /books/:id/finish(.:format)   books#finish
unfinish_book PUT    /books/:id/unfinish(.:format) books#unfinish

正如你所看到的,在这些URL中没有:list_id参数,只有:id参数,所以你的控制器代码中的params[:list_id]将没有值,因此你得到的错误。

你可能应该在嵌套的books资源中拥有那些完成/未完成的路线,如下所示:

resources :lists do
  resources :books do
    member do
      put :finish
      put :unfinish
    end
  end
end

然后调整您的link_to调用发送: finish_list_book_path(@list, book)和未完成的等价物。

链接地址: http://www.djcxy.com/p/18453.html

上一篇: Rails JQUERY Toggle with Nested Resources

下一篇: Rails: route helpers for nested resources