<% @books.each do |book| %>
<% unless book.checkout_user_id == nil %>
<%= link_to "delete checkout", book_checkout_path(book_id: book.id), :confirm => 'Are you sure?', :class => "button", :method => :delete %>
<% end %>
<% end %>
在上面的代码中,我想将一个参数传递给我的book_checkout控制器。我怎么能这样做,所以我的destroy方法将检索从book_checkout_path传入的:book_id。
然后创建一个实例以使用相应的book_id属性搜索结帐,而不是按ID搜索。
def destroy
@book_checkout = BookCheckout.where(book_id: book_id).first # this line is wrong
@book_checkout.destroy
redirect_to books_path
end
编辑:添加路线。 路线:
book_checkout GET /book_checkouts/:id(.:format) book_checkouts#show
PATCH /book_checkouts/:id(.:format) book_checkouts#update
PUT /book_checkouts/:id(.:format) book_checkouts#update
DELETE /book_checkouts/:id(.:format) book_checkouts#destroy
答案 0 :(得分:1)
@book_checkout = BookCheckout.find_by(book_id: params[:book_id])
由于路线只有一个ID,我认为你可以使用
book_checkout_path(book.id)
但是,使用Book id查找BookCheckout似乎很奇怪。你有什么特别的理由不能做到:
book_checkout_path(book_checkout.id)
和
@book_checkout = BookCheckout.find_by(id: params[:id])
此外,Book id和Book Checkout id是否可能相同(1)?如果不应该这样做,这会使它看起来成功。
答案 1 :(得分:1)
我必须修复原始代码以获得解决方法,但它并不是最干净的。
<%= link_to "delete checkout", book_checkout_path(id: book.id, check: book.id), :confirm => 'Are you sure?', :class => "button", :method => :delete %>
我原来的link_to需要传递id,因为我的路由期望,所以我添加了一个检查,通过了我需要的属性。
@book_checkout = BookCheckout.find_by(book_id: params[:check])
在我的结帐控制器中,我使用params [:check]而不是params [:id],因为我无法使用book.id覆盖params [:id]。