2016-03-10 28 views
0

我想從我的/clients/:client_idshow頁面鏈接到現有路由/clients/:client_id/invoices/:id 並不能工作如何做到以正確的路由。無法鏈接使用的link_to

我有一個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格式,但我一直沒能弄明白。

回答

2

您正在使用錯誤的url_helper和錯誤的參數。你應該有:

<td><%= link_to 'Show', client_invoice_path(@client, invoice) %></td> 

<td><%= link_to 'Show', invoice_path(invoice) %></td> 

invoices_pathresources :invoices(最外面的)產生url_helper和意志路線,你爲你的InvoicesController(/invoices)的索引路徑。如果你傳遞一個參數,它將被用於格式(/invoices.10 - 很常見的問題)。

嵌套resources生成的所有路由的名稱都由兩個資源組成,如new_user_profile_pathclient_invoice_type_path(三重嵌套)。

請注意,您當前的路由結構(具有兩條不同路徑的相同資源)可能會使您的控制器邏輯更加複雜。選擇一條路線通常就足夠了。