使用嵌套浅层路由时无法 link_to 更正路径

Can't link_to correct path when using nested shallow routes

我在 rails 应用程序中使用嵌套路由。我成功地 link 到 clients/:id/invoices/:id 我遇到的问题是 运行 我认为我使用的是浅路由,所以在单击 invoice show link 我的应用程序从 /client/:id 重定向到 /invoice/:id。现在,当我尝试从 show link 返回到我的 client_path 时,我发现两条路线混淆了。

例如 invoice/34 变成 client/34 当我尝试 link_to 我的客户端路径时它应该更改为 clients id.

我认为这可能与我 clients_controller 中的 show 行为有关 @client = Client.find(params[:id])

我的路线

resources :clients do
resources :invoices, shallow: true
end

我的客户控制器显示操作

def show
@client = Client.find(params[:id])
@invoices = @client.invoices
end

客户show.html.erb

<% @invoices.where(published: false).each do |invoice| %>
  <tr>
   <td><%= invoice.sender %></td>
   <td><%= invoice.reciever %></td>
   <td><%= invoice.amount %></td>
   <td><%= invoice.currency %></td>
   <td><%= invoice.date %></td>
   <td><%= link_to 'Show', invoice_path(invoice) %></td>
  </tr>                
<% end %>  

和我的发票show.html.erb

<%= link_to 'Back', client_path, class: "btn btn-primary" %>

我认为问题是 client_path 不知道要使用哪个 Client,它默认为 params[:id]。您可能希望 link_to 看起来像这样:

<%= link_to 'Back', client_path(invoice.client), class: "btn btn-primary" %>

其中明确说明要使用与此 Invoice 关联的 Client