2014-12-30 2 views
0

버튼을 라우팅하여 컨트롤러에서 작업을 호출하는 데 문제가 있습니다. 구체적으로, 내 경로 파일에이 라인Root에서 button_to 경로 라우팅

delete 'destroy/:id', to: 'users#admin_destroy'

및보기에이 라인

%= button_to 'Destroy', destroy_path(user), data: { confirm: 'Are you sure?' } %>

있습니다.

문제는 페이지가 destroy_path를 메서드로 계속 처리하고 있으며 올바른 구문이 무엇이어야하는지에 대한 손실이 있다는 것입니다. 내가 오해하니?

또한 원래이 작업을 link_to로 시도했지만 GET 요청을 위해 예약해야한다는 것을 알게되었습니다. 그러나, 나는 button_to가 어떻게 보이는지 맘에 들지 않으며, 이것을 GET으로 할 수있는 방법이 있는지 궁금해서 link_to를 대신 사용할 수 있습니다. 이 완전히 문제를 해결할 수 있는지를

+0

정확한 오류 메시지가 도움이 될 것입니다. 'user'를 어떻게 채우고 있습니까 ('@ user'이어야합니까?)? routes.rb 코드에는 url_helper 경로에 대한 언급이 없으므로 라우트와 연결하지 않고'destroy_path'를 사용할 수 있는지 확신 할 수 없습니다. '레이크 루트 '의 결과는 무엇입니까? – JTG

+0

그리고 데이터베이스를 변경할 수있는 작업에 link_to/GET을 사용하면 안됩니다. 보안 관련 사항이나 봇이 웹 사이트를 검색하는 방법이나 멱등 원한 행동을 너무 많이하지 않더라도 실제로는 권장되지 않으며 올바른 HTTP 동사로이 작업을 수행하는 방법을 배우고 CSS. – JTG

+0

답장을 보내 주셔서 감사합니다! _user_list.html.erb에서이 부분을 '<% = render : partial => '사용자/사용자', : collection => users %' (원래 destroy_path 행은 _user.html.erb에 있습니다)이라고합니다. 레이크 루트 전체를 나열하지는 않을 것입니다. 왜냐하면 상당히 큰 경로이기 때문에 destroy_path가 파괴 경로에 연결하는 것은 잘못된 것이라고 생각합니다. 맞아. 현재, 페이지는 destroy_path가 메소드라고 생각하고 그것을 정의하는 방법을 알지 못합니다 (실제로 메소드가 아니기 때문에 나는 경로 구문에서 짐작했습니다). –

답변

1

잘 모르겠어요,하지만 ... 당신은 주문과 같이 경로를 정의 할 수 있습니다 :

delete 'destroy/:id', to: 'users#admin_destroy', as: :destroy 

config/routes.rb에 이것은 당신이 destroy_path을 사용하실 수 있습니다 응용 프로그램에서 admin_destroy 기능을 사용하여 사용자 컨트롤러로 경로를 지정하십시오.

자세히 알아보기 here

+0

고마워요. 일단 원래의 뷰 라인에'method : : delete'를 추가하면 작동하는 것 같습니다. 이 방법을 사용하면 컨트롤러로 리디렉션되고 PHP에서 수행하는 데 익숙한 적절한 HTTP 메서드를 실행한다는 것을 명확하게 알 수 있습니다. 나는 왜 내가'as : : destroy'를 필요로하는지에 대해 호기심이 많습니다. - 잘 라우팅하는 목적을 이길 수는 없습니까? 만약 내가 이미 button_to를 delete로 식별하고 사용자 컨트롤러에 대한 뷰에서 그렇게한다면, 왜'destroy_path'를 추가로 정의해야합니까? 일부 사용하지 않는 경로가 있습니까? –

+1

레일 (Rails)은 구성에 대한 협약입니다. 그래서 당신의 루트에서'resources models'을 할 때, 그것은 당신을위한 CRUD 경로의 대부분을 설정하고 그것들을 적절하게 이름 짓는다는 것입니다 (나는 그들 중 누군가가 destroy_path라고 생각하지 않습니다). 그러나 레일스는 URL 경로를 만들지 않으므로 경로명을 알지 못하기 때문에 레일스를 만들지 않으므로 명시 적으로 이름을'as : '선언. – JTG

+0

아, 알겠습니다. 고마워, 이건 정말 도움이되었다! –