2012-12-04 1 views
0

레일즈 애플리케이션에서 간단한 AJAX를 사용하고 싶습니다. 내가 가진 주된 문제는 스크립트 내에서 요청이 전달 될 URL을 지정해야한다는 것입니다. 대부분의 경우이 명령은 일부 Rails 컨트롤러 작업에 대한 경로입니다. 다른 곳에서는 손으로 경로를 명시 적으로 작성하지 말고 (예 : '/my_resources/' + resource_id과 같은 추악한 것들은하지 말고) my_resource_path과 같은 도우미를 사용하는 것이 좋습니다.Rails 앱에서 AJAX로 JS 스크립트를 작성하는 것이 가장 좋습니다. 스크립트에 URL을 포함시키는 방법은 무엇입니까?

그러나이 도우미는 assets/javascripts에서 작동하지 않으므로이 방법은 javascript에서는 잘 작동하지 않습니다. 나는이 문제를 우회 할 수있는 몇 가지 추한 방법을 생각할 수있는, 현재 나는 기본적으로 내보기 내에서 다음과 같이 뭔가를 가하고 매우 추한 해결 방법을 구현했습니다 :

<%= javascript_tag "onSubmitQuotePage('#{j escape_javascript(autocomplete_authors_url(''))}');"%> 

를하지만 상상할 수 없다 '개발자 didn를 레일 좀 더 예민한 솔루션, AJAX를 수행하는 올바른 방법을 생각해보십시오.

+2

데이터 요소의 요점은 js 작업이 dom 요소에 연결되어 있고이 dom 요소에 관련 데이터가 있어야합니다. – apneadiving

답변

2

나는 내가 이렇게하는 방식을 좋아하지 않는다고 말할 수 없다. 이것을하는 더 좋은 방법을 듣는 것이 매우 행복하다.

그러나 관련 DOM 요소의 데이터 속성에 경로를 포함하거나 일부 정적 경로의 경우 관련 경로가 포함 된 레이아웃 파일에 <script> 블록을 포함시킵니다.

<script> 
(function() { 
"use strict"; 
window.myapp || {}; 
window.myapp.new_order_path = '<%= new_order_path %>'; 
window.myapp.orders_path = '<%= orders_path %>'; 
... 
}()); 
</script> 

이 더 예쁜 솔루션을 의미가 없다,하지만 난 내 JS의 경로를 필요로하는 경우가 오히려 드문 내가 필요로 할 때 그 방법은 그때 나는 내 JS에서 myapp.new_order_path를 사용할 수 있습니다.

+0

데이터 속성이 적합합니다. 감사 – kamilk

1

여기에 내 두 센트를 추가하기 만하면 : 레일스 헬퍼를 사용하여 일종의 URI 템플릿을 생성 할 수 있습니다. 예를 들어, 당신이있는 경우,이 경로는 정의 :

edit_user GET /users/:id/edit(.:format) users#edit

그리고 그것은 /users/:user_id:/edit를 반환합니다 당신은 edit_user_path(':user_id:') 다음과 같이 호출. 이렇게하면 자바 스크립트로 컴파일 할 URI 템플릿을 생성 할 수 있습니다. @Tigraine이 말했듯이, 이것을 상위 요소의 데이터 속성에 포함시켜 클라이언트 측에서 사용할 수 있습니다.

정말 AJAX 가져온 리소스에 대한 URI를 생성해야하는 상황에서 리소스 ID를 제공하고 자바 스크립트가 간단하게 string.replace(':user_id:', user_id)으로 템플릿의 URI를 컴파일하도록합니다.

관련 문제