我正在用Ruby (1.9.3) on开发一个飞行跟踪应用程序(3.2.11)。这个应用程序有一个Flight类,它有一个字符串列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/view/比对/ index _ tail s.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>但是,它没有像我所希望的那样创建指向/tail//tails/N909EV(例如,/tails/N909EV)的链接,而是创建了一个指向/tails.tail_number (/tails.N909EV)的链接。这个链接显然没有将我发送到我想要的flights#show_tail。
我已经成功地为其他与飞行(机场、旅行)相关的模型创建了索引,并为飞行本身创建了索引,它们都是通过使用,例如,我试图使用的用于尾号的link_to trip.name, trip_path(trip)语法来工作的。因此,如果Tail_Number是一个模型,并且我可以以同样的方式对待它,那么这将是非常微不足道的,但是对于一个模型来说,它似乎太小了,而不是一个给定航班的属性。
我假设它不适用于我的原因是,当我使用trip_path(trip)时,trip是一个对象,而在tails_path(tail_number)中,tail_number是一个字符串。但我不确定我该怎么联系它。我尝试过像使用URL参数执行操作中的命名路由这样的解决方案,但是如果我这样做的话,我会遇到同样的undefined method问题,所以我回到上面列出的内容。
我应该如何格式化我的link_to以使其工作?
发布于 2013-03-08 04:11:55
由于动作: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)来避免其他操作中的问题。
https://stackoverflow.com/questions/15286506
复制相似问题