2013-03-08 60 views
0

我正在Rails(3.2.11)上的Ruby(1.9.3)中的航班跟蹤應用程序。此應用程序有一個Flight班級,其中包括一個字符串列tail_number,用於跟蹤執行飛行的飛機的tail numberRails link_to非字符串參數非足跡路由

我試圖爲尾號創建一個索引視圖,顯示尾號和每個號的列表,並鏈接到一個視圖,該視圖將顯示所有具有該尾號的Flights我有展示頁面的工作,但我在索引頁上工作link_to時遇到麻煩。

顯示視圖由flights控制器的show_tail行動,我已經在routes.rb中設置了處理:

match '/tails' => 'flights#index_tails' 
match '/tails/:tail_number' => 'flights#show_tail' 

飛行控制組由尾號航班,並提供一個計數:

def index_tails 
    @flight_tail_numbers = Flight.where("tail_number IS NOT NULL").group("tail_number").count 
end 

在我的尾號爲索引頁(/app/views/flights/index_tails.html.erb),我創建了尾號的表和每個計,打算有尾號鏈接到相應的顯示視圖:

<h1>Tail Numbers</h1> 

<table> 
<% @flight_tail_numbers.each do |tail_number, count| %> 
    <tr> 
    <td><%= link_to(tail_number, tails_path(tail_number)) %></td> 
    <td><%= count %> 
    </tr> 
<% end %> 
</table> 

然而,代替link_to創造一個像我希望/萬尾/ tail_number的鏈接(例如,/tails/N909EV),它,而不是創建一個鏈接到/tails.tail_number(/tails.N909EV)。這個鏈接顯然不會把我送到我想要的航班#show_tail。

我已經成功地創建了與飛行(機場,旅程)和航班本身相關聯的其他模型的索引,並且它們都通過使用例如我嘗試使用的link_to trip.name, trip_path(trip)語法尾號。所以如果Tail_Number是一個模型並且我可以以相同的方式處理它,那麼這將是非常微不足道的,但是對於一個模型而言,它與一個給定航班的屬性相比似乎太過簡單。

我假設它不是爲我工作的原因是,當我使用trip_path(trip)trip是一個對象,而在tails_path(tail_number)tail_number是一個字符串。但我不確定我應該如何鏈接到它。我已經嘗試了像Rails link_to action with URL parameters中的命名路線這樣的解決方案,但是如果我這樣做,我會得到相同的undefined method問題,所以我恢復爲上面列出的內容。

我應該如何格式化我的link_to以使其工作?

回答

1

由於動作:show_tail不是REST式操作,因此您需要在:as語句中指定它。

你可以改變你的路線,支持你想要什麼:

match '/tails/:tail_number' => 'flights#show_tail', :as => :tails 

,這將允許它來搭配tails_path

我可能會命名爲像

match '/tails/:tail_number' => 'flights#show_tail', :as => :show_tails 

並使用show_tails_path(tail_number)來避免其他操作的問題。

+0

工作完美,謝謝。出於某種原因,我嘗試重命名路線並鏈接到該路線,但從未想過向其添加'_path'。 – bogardpd 2013-03-08 04:24:04