알려진 디자인 패턴이 누락 된 것인지 확실하지 않지만 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
답변 해 주셔서 감사합니다. 예제가 명확한 지 잘 모르겠지만 두 경우 모두 사용자 이름 목록 만 반환 할 것입니다. 첫 번째 예에서는 페이지 매김 된 목록을 채 웁니다. 두 번째에는
조회수는 사물을 다르게 표시하기위한 것입니다. 동일한 데이터를 두 번 가지고 있지만 두 번 다르게 표시하려는 경우 좋은 방법은 조건을 수행하지 않는 것입니다. 그러나 두 가지 견해를 나타냅니다. –
조건을 뷰로 이동하는 방법은 무엇입니까? 이것이 좋은 연습일까요? 조건에 따라 동일한 동작 내에서 다른보기를 렌더링하는 선을 따라 뭔가를 생각합니다. 예 : render (조건? view_one : view_two) –