2012-02-16 4 views
20

저는 Rails를 처음 사용하기 때문에 link_to 도우미를 사용하여 GET 요청 대신 PUT 요청을 발행하는 링크를 만들려고합니다. 특히, 관리자의 패널에서 내 앱의 사용자 계정을 활성화하는 링크를 만들려고합니다. 레일 3.0.5를 사용하고 있습니다.Ruby on Rails link_to with 메소드 넣기

내 routes.rb 파일이 있습니다

match '/admin/users/:id/activate' => 'admin#activate_user', 
    :action => :activate_user, :via => :put 

내보기가 있습니다

link_to 'Activate', :action => :activate_user, :id => user.id, :method => :put 

그러나이 (예를 들어)이 URL의 소스 코드 <a href="/admin/users/7/activate?method=put">Activate</a>/admin/users/7/activate?method=put를 생성합니다.

내가, 왜 내가이 동작을보고 있어요 내가 button_to을 사용할 수 있습니다 실현,하지만 난 잠시 동안이 문제와 씨름하고있다 그리고 나는 혼란 스러워요, 대신, 생성 <a href = "/admin/users/7/activate" data-method="put">Activate</a>

싶습니다 다른 튜토리얼에서는 내가하고있는 일이 유효해야한다고 말합니다. 원하는 동작으로 link_to 도우미를 만드는 방법은 무엇입니까?

답변

25

업데이트 됨 - link_to 도우미는 메서드가 지정되어 있지 않으면 GET을 수행합니다.

경로 파일에 match 대신 정확한 요청 유형을 지정하는 것이 좋습니다. 같은 경로에 put에 의해 match 교체에 대해 어떻게 :

put '/admin/users/:id/activate' => 'admins#activate_user', :as => 'activate_user' 

link_to 'Activate', activate_user_path(user.id), method: :put 

activate_user 방법은 admins 컨트롤러에 있어야합니다. docs에는 link_to 도우미에 대한 자세한 정보가 있습니다.

+1

위의 경로에 레이크 경로가 어떤 영향을 줍니까 ?? 게시 할 수 있습니까? – prasvin

+1

감사합니다. 그리고 그것은 가장 깨끗한 해결책입니다 :) – maksim

+4

이것은 나를 위해 작동하지 않습니다. link_to에 메소드가 정의되어 있지 않으면 No route와 일치하는 [GET] 오류 메시지가 나타납니다. – ndemoreau

30

link_to:method => :put이 경로 해시의 일부라고 생각합니다. 그렇지 않으면 그것을 말해야합니다. 대괄호로 묶어서 경로를 지정하십시오.

link_to 'Activate', {:action => :activate_user, :id => user.id}, :method => :put 

이제 link_to는 옵션, 링크의 경로의 일부로서 :method => :put을 인식합니다.

가능한 한 경로 해시 대신 경로 도우미를 사용해보십시오. 일을 멋지고 깔끔하게 유지하고 이와 같은 까다로운 상황을 피하십시오.