0

Rails (3.2.11) で Ruby (1.9.3) のフライト追跡アプリケーションに取り組んでいます。このアプリケーションにはクラスがあり、特に、飛行を実行した飛行機のテール番号を追跡するためFlightの文字列列があります。tail_number

テール番号のインデックス ビューを作成し、テール番号とそれぞれの数のリストを表示し、そのテール番号Flightsを持つすべてを表示するビューにリンクしようとしています。 ショー ページは機能link_toしていますが、インデックス ページの作成に問題があります。

show ビューは、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/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 をどのようにフォーマットすればよいですか?

4

1 に答える 1

2

アクションは RESTful アクションではないため、ステートメント:show_tailで割り当てる必要があります。: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 に答える