2009-10-05 4 views
0

알려진 디자인 패턴이 누락 된 것인지 확실하지 않지만 Railsful Rails 경로와 관련된 다음 문제를 계속 해결합니다.라우트 및 자바 스크립트 응답 정리

예를 들어, javascript (: js) 형식으로 응답 할 수있는 사용자 컨트롤러가 있습니다. 기본 응답은 페이지가 매겨진 사용자의 목록과 페이지 요소를 채 웁니다 :이 날 사용자에 AJAX 조회를 수행 할 수 있도록 잘 작동

# /app/views/users/index.js.rjs 
page.replace_html :users, :partial => 'users' 

: 같은

# /app/controllers/users_controller.rb 
class UsersController < ActionController 
    def index 
    @users = User.paginate(:all, :page => params[:page], :conditions => ['name ILIKE ?', params[:name]) 

    respond_to do |format| 
     format.html 
     format.js 
    end 
    end 
end 

해당 RJS 템플릿이 보일 것이다. 그러나 내 사이트의 다른 부분 (예 : 사용자 편집 양식)에서는 AJAX 조회를 수행하고 '선택'옵션 세트를 업데이트하거나 #users 페이지를 업데이트하는 대신 인라인 자동 완성을 수행하고 싶습니다. 요소, 예.

# /app/views/users/edit.html.erb 
<%= f.text_field :name %> 
$('#user_name').autocomplete({url: '/users', data: 'name=value', ...}) 

제 질문은 이것을 달성하는 가장 좋은 방법은 무엇입니까? 필자는 다른 뷰에 대응하기 위해 새로운 컨트롤러 액션을 생성해야한다고 생각하지 않는다. 이것은 찾기 코드를 반복해야하기 때문이다. 내가 지금까지 건너 한 유일한 해결책은 내 RJS 도우미로 일부 자바 스크립트 조건을 구축하는 것입니다 :

# /app/views/users/index.js.rjs 
page << "if($('#users').length > 0)" 
    page.replace_html :users, :partial => 'users' 
page << "else" 
    page.replace_html :user_options, :partial => 'user_options_for_select' 

이 레일에 매우 취성, 부정한 느낀다. 호출하는 컨트롤러에 따라 다른보기로 응답하는 방법에 뭔가 빠졌습니까?

감사합니다. Chris

답변

0

그 중 하나에는 사용자 목록이 있고 다른 하나에는 옵션 목록이 있습니다.
그럼에도 불구하고 두 페이지가 동일한 기능을 갖고 있어도 서로 독립적이며 향후 어느 한 페이지 만 변경하려고 할 수 있습니다.

그래서 두 개의 서로 다른 javascript 액션으로 구분할 수 있습니다. 그것은 당신이 훨씬 더 쉽게 그들을 다른 길로 진화시킬 수있게 해줄 것입니다.

어쨌든 볼 수 있듯이 이미 상당히 다릅니다. 두 개의 서로 다른 부분 태그와 두 개의 다른 HTML 태그가 있습니다.
둘 모두에 대해 동일한 코드를 사용하려고하면 나에게 매우 혼란스러워 보입니다.

그래서 사용자 목록과 옵션에 대해 두 가지 작업을 만듭니다.

+0

답변 해 주셔서 감사합니다. 예제가 명확한 지 잘 모르겠지만 두 경우 모두 사용자 이름 목록 만 반환 할 것입니다. 첫 번째 예에서는 페이지 매김 된 목록을 채 웁니다. 두 번째에는