0

我正在使用 Rails (3.2.11) 上的 Ruby (1.9.3) 开发航班跟踪应用程序。这个应用程序有一个Flight类,其中有一个字符串列tail_number,用于跟踪执行飞行的飞机的尾号

我正在尝试为尾号创建一个索引视图,显示尾号列表和每个尾号的计数,并链接到一个视图,该视图将显示所有Flights具有该尾号的视图。 我的显示页面正常工作,但link_to在索引页面上工作时遇到问题。

显示视图由我在 routes.rb 中设置的flights控制器操作处理:show_tail

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创建指向 /tails/tail_number 的链接(例如),而是创建指向 /tails.tail_number ( ) 的链接。此链接显然不会将我发送到我想要的航班#show_tail。/tails/N909EV/tails.N909EV

我已经成功地为与 Flight (Airports, Trips) 关联的其他模型创建了索引,并为 Flight 本身创建了索引,并且它们都通过使用例如link_to trip.name, trip_path(trip)我试图用于尾号的语法来工作。因此,如果 Tail_Number 是一个模型,这将是非常微不足道的,我可以以同样的方式对待它,但它似乎太微不足道了,不能作为一个模型而不是一个给定航班的属性。

我假设它对我不起作用的原因是当我使用trip_path(trip),时trip是一个对象,而 in tails_path(tail_number),tail_number是一个字符串。但我不确定我应该如何链接到它。我已经尝试过使用 URL 参数的 Rails link_to action中的命名路由之类的解决方案,但如果我这样做,我会遇到同样的undefined method问题,所以我恢复到上面列出的内容。

我应该如何格式化我的 link_to 以使其工作?

4

1 回答 1

2

由于该操作: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)避免其他操作出现问题。

于 2013-03-08T04:11:55.820 回答