无法 link 使用 link_to 更正路线
Can't link to correct route using link_to
我正在尝试link到现有路线/clients/:client_id/invoices/:id
来自我的 /clients/:client_id
show
页面,但不知道如何操作。
我有 has_many through:
关系,这是我的 models
class Client < ActiveRecord::Base
has_many :invoices
has_many :items, through: :invoices
class Invoice < ActiveRecord::Base
belongs_to :user
belongs_to :client
has_many :items, :dependent => :destroy
accepts_nested_attributes_for :items, :reject_if => :all_blank, :allow_destroy => true
class Item < ActiveRecord::Base
belongs_to :invoice
belongs_to :client
我的路线
resources :clients do
resources :invoices
end
resources :invoices
我的客户端控制器显示动作
def show
@client = Client.find(params[:id])
@invoices = @client.invoices.build
end
还有我的客户show.html.erb
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>Sender</th>
<th>Reciever</th>
<th>Amount</th>
<th>Currency</th>
<th>Date</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @client.invoices.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', invoices_path(@clients, @invoice) %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
每次我点击 link_to show
它会将我转到 /invoices
我尝试了很多不同的 link_to
格式,但我一直无法弄清楚。
您使用了错误的 url_helper 和错误的参数。你应该有:
<td><%= link_to 'Show', client_invoice_path(@client, invoice) %></td>
或
<td><%= link_to 'Show', invoice_path(invoice) %></td>
invoices_path
是由 resources :invoices
(最外面的那个)生成的 url_helper,会将您路由到 InvoicesController (/invoices
) 的索引路径。如果您传递参数,它将用于格式(/invoices.10
- 很常见的问题)。
嵌套resources
生成的所有路由都有一个由两种资源组成的名称,如new_user_profile_path
或client_invoice_type_path
(三重嵌套)。
请注意,您当前的路由结构(具有两个不同路径的相同资源)可能会使您的控制器逻辑更加复杂。通常只有一条路线就够了,挑一条。
我正在尝试link到现有路线/clients/:client_id/invoices/:id
来自我的 /clients/:client_id
show
页面,但不知道如何操作。
我有 has_many through:
关系,这是我的 models
class Client < ActiveRecord::Base
has_many :invoices
has_many :items, through: :invoices
class Invoice < ActiveRecord::Base
belongs_to :user
belongs_to :client
has_many :items, :dependent => :destroy
accepts_nested_attributes_for :items, :reject_if => :all_blank, :allow_destroy => true
class Item < ActiveRecord::Base
belongs_to :invoice
belongs_to :client
我的路线
resources :clients do
resources :invoices
end
resources :invoices
我的客户端控制器显示动作
def show
@client = Client.find(params[:id])
@invoices = @client.invoices.build
end
还有我的客户show.html.erb
<div class="panel-body">
<table class="table table-hover">
<thead>
<tr>
<th>Sender</th>
<th>Reciever</th>
<th>Amount</th>
<th>Currency</th>
<th>Date</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @client.invoices.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', invoices_path(@clients, @invoice) %></td>
</tr>
<% end %>
</tbody>
</table>
</div>
每次我点击 link_to show
它会将我转到 /invoices
我尝试了很多不同的 link_to
格式,但我一直无法弄清楚。
您使用了错误的 url_helper 和错误的参数。你应该有:
<td><%= link_to 'Show', client_invoice_path(@client, invoice) %></td>
或
<td><%= link_to 'Show', invoice_path(invoice) %></td>
invoices_path
是由 resources :invoices
(最外面的那个)生成的 url_helper,会将您路由到 InvoicesController (/invoices
) 的索引路径。如果您传递参数,它将用于格式(/invoices.10
- 很常见的问题)。
嵌套resources
生成的所有路由都有一个由两种资源组成的名称,如new_user_profile_path
或client_invoice_type_path
(三重嵌套)。
请注意,您当前的路由结构(具有两个不同路径的相同资源)可能会使您的控制器逻辑更加复杂。通常只有一条路线就够了,挑一条。