2013-03-08 32 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

相关问题