2013-03-08 2 views
0

나는 Rails (3.2.11)의 루비 (1.9.3)에서 비행 추적 어플리케이션을 연구 중이다. 이 응용 프로그램에는 비행을 수행 한 비행기의 tail number을 추적하기위한 문자열 열 tail_number이 포함 된 Flight 클래스가 있습니다.레일즈 link_to String-with Non-Resourceful Route 파라미터

꼬리 번호에 대한 색인보기를 생성하고 각 꼬리 번호 및 개수를 표시하고 해당 꼬리 번호를 가진 Flights을 모두 표시하는보기에 연결하려고합니다. 표시 페이지가 작동하지만 색인 페이지에서 link_to 작업을하는 데 문제가 있습니다.

쇼보기 내가 routes.rb에서 설정 한 flights 컨트롤러의 show_tail 행동에 의해 처리됩니다 테일 번호로

match '/tails' => 'flights#index_tails' 
match '/tails/:tail_number' => 'flights#show_tail' 

비행 컨트롤러 그룹에게 항공편과 수를 제공

내 꼬리 숫자 인덱스 페이지 (/app/views/flights/index_tails.html.erb)에
def index_tails 
    @flight_tail_numbers = Flight.where("tail_number IS NOT NULL").group("tail_number").count 
end 

, 나는 적절한에 꼬리 번호 링크를하려는, 꼬리 숫자의 테이블과 각각의 수를 만들 쇼보기 :

<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> 

그러나, 대신 내가 바라고 있어요 같은 (예를 들어, /tails/N909EV)/꼬리/tail_number에 대한 링크를 만드는 link_to의, 대신 (/tails.N909EV를) /tails.tail_number에 대한 링크를 작성합니다. 이 링크는 내가 원하는 항공편 # show_tail으로 나를 보내지 않습니다.

Flight (공항, 여행) 및 Flight 자체의 인덱스와 관련된 다른 모델의 인덱스를 성공적으로 만들었으며, 모두 예를 들어 link_to trip.name, trip_path(trip) 구문을 사용하여 작동합니다. 꼬리 숫자. 따라서 Tail_Number가 모델이고 동일한 방식으로 처리 할 수 ​​있다면 매우 사소할 것입니다. 그러나 주어진 비행의 속성 대 모델이되는 것은 너무 사소한 것처럼 보입니다. 내가 나를 위해 작동하지 않는 이유를 믿고있어

내가 trip_path(trip)를 사용하여있을 때, triptails_path(tail_number)에, tail_number 문자열 반면 객체 것입니다. 하지만 정확히 어떻게 링크해야하는지 잘 모르겠습니다. 나는 Rails link_to action with URL parameters에있는 명명 된 경로와 같은 솔루션을 시도했지만, 내가 그렇게한다면 동일한 undefined method 문제가 발생하므로 위의 목록으로 되돌아갔습니다.

이 작업을하려면 내 링크를 어떻게 포맷해야합니까?

답변

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)을 사용하십시오.

+0

완벽하게 작동했습니다. 감사합니다. 웬일인지, 나는 길의 이름을 바꾸고 그것과 연결을 시도했지만 결코 그것에'_path'를 추가 할 생각은 없었다. – bogardpd