使用参数

时间:2015-05-13 23:17:37

标签: ruby-on-rails ruby

<% @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

2 个答案:

答案 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]。