我正在使用Rails(3.2.11)中的Ruby(1.9.3)中的航班跟踪应用程序。此应用程序有一个Flight
类,其中包含一个字符串列tail_number
,用于跟踪执行该航班的飞机的tail number。
我正在尝试为尾号创建一个索引视图,显示尾号的列表和每个尾号的数量,并链接到一个视图,该视图将显示具有该尾号的所有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)上,我创建了一个尾数表和每个尾数的表,打算将尾号链接到相应的show视图:
<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
创建到/ tails / tail_number的链接(例如,/tails/N909EV
),而是创建一个指向/tails.tail_number的链接({{ 1}})。这个链接显然不会把我送到我想要的航班#show_tail。
我已成功为其他与Flight(机场,旅程)和Flight本身的索引相关联的模型创建了索引,并且它们都可以通过使用我正在尝试的/tails.N909EV
语法来工作用于尾号。因此,如果Tail_Number是一个模型并且我可以用同样的方式对待它,这将是非常微不足道的,但是仅仅是模型而不是给定飞行的属性似乎太微不足道了。
我假设它不适合我的原因是,当我使用link_to trip.name, trip_path(trip)
时,trip_path(trip)
是一个对象,而在trip
中,tails_path(tail_number)
是一个串。但我不确定我应该如何链接到它。我已尝试像Rails link_to action with URL parameters中的命名路由之类的解决方案,但如果我这样做,我会遇到相同的tail_number
问题,所以我又回到了上面列出的内容。
我应该如何设置link_to格式以使其正常工作?
答案 0 :(得分:1)
由于操作:show_tail
不是RESTful操作,因此您需要在: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)
来避免其他操作出现问题。