2009-06-20 3 views
0

레일, 자바 스크립트 및 리디렉션에 심각한 문제가 있습니다. JS가 비활성화되어 있으면 기본적으로 다른 페이지로 리디렉션하는 "간단한"문제가 있습니다. JS가 활성화 된 경우 즉시 새 항목을 인라인으로 추가합니다. 이는 매력과 같습니다. 그러나 JS가 비활성화 된 경우 다른 컨트롤러의 새 페이지로 리디렉션하고 싶습니다. 기본적으로 모델 설정은 다음과 같습니다.(Ruby, Rails, Javascript) 자바 스크립트가 비활성화되었을 때 다른 페이지를 리디렉션/렌더링 ...?

Site -> Buildings -> Controllers (not to be confused with Rails "controllers") 

JS를 사용하여 모든 것을 관리하는 "SiteManagerController"가 있습니다. 기본적으로 나는 다음을하려고하는 시나리오가 있습니다 :

1) JS가 활성화 된 경우 항목을 인라인으로 추가하고 싶습니다. 2) JS가 비활성화 된 경우 2 단계 : "controller => buildings , : action => new "

"link_to_remote "는 간단합니다. 내가 말했듯이, JS 용으로 작동합니다. 내 레일 컨트롤러 코드는 다음과 같습니다

데프 add_building @ building.site_id = PARAMS @building = Building.new @ building.name = "제목 없음"[: ID] 할 respond_to building.save @ | 형식 | format.html {redirect_to : 컨트롤러 => "건물": 행동 => "새로운"} format.js 끝 끝

이 작동하지 않습니다. 그것이 가치있는 일이라면 페이지 소스를 볼 때 JS가 사용 가능할 때와 사용할 수 없을 때 다른 것이 없다는 표시는 없습니다. 모든 링크가 동일하게 보입니다 (예 : Ajaxy).

이 복잡한 문제가 아니어야한다는 것을 알고 있지만, 나는 다소 혼란 스럽습니다.

최고.

P. 이 게시물의 제목을 변경하지 마십시오. ;)

+0

당신은'Building.create ({에 @building 물건을 모두 줄일 수있다 : 이름 => "제목 없음": site_id => params [: id]})'. :) – epochwolf

+0

그래, 그게 가능한 한 장황 해 지려고 애쓰는 나머지 부분이야. 그래도 고마워. –

답변

0

언급 link_to_remote 솔루션은 아마 작동합니다,하지만 당신이 그것을 할 수있는 눈에 거슬리지 방법을 찾고 있다면, 당신은 다음과 같이 몇 가지 자바 스크립트 (jQuery를) 사용하여 .html.erb 파일에

을 :

자바 스크립트 파일에
<%=link_to "New Building", new_building_path, :id => 'new_building_link' %> 

:

$(document).load(function() { 
    $("#new_building_link").click(function() { 
    $.ajax({ 
     type:  "POST", # or whatever http method you need 
     url:  "/buildings/add_building", 
     dataType: "script" 
    }); 
    return false; 
    }); 
}); 

은 다음 변경할 페이지의 영역을 업데이트합니다 일부 JS를 반환합니다.

레일즈 용 기본 JS 라이브러리 인 Prototype을 사용하는 것과 비슷한 방법이 있지만 프로토 타입을 모르겠습니다.

또한 이것은 편안한 경로 (컨트롤러와 동작을 지정하는 대신 new_building_path)를 사용합니다. 이것이 현재 선호되는 방법입니다. routes.rb에 'map.resources : buildings'를 추가하면됩니다. 평온한 길에 대한 몇 개의 Railscast가 있고, $ 9를 떨어 뜨리면 Peepcode가 있습니다.

하여 사용하여 당신은 당신의 건물 생성 코드 축소 할 수 언급 한 의견 중 하나로서 : 이 Building.create({:name => "Untitled", :site_id => params[:id]})

+0

그래, 기본적으로 RAILScentric (예 : 명시 적 JS 호출 대신 래퍼 사용)을 유지하면서 가능한 한 장황하게하려고 노력 중입니다. 그러나 나는 당신의 제안을 좋아합니다. 해결책은 링크가 아니라 컨트롤러에 있음을 확인합니다. 감사. –

+0

당신이 가능한 한 간단하고 obtrusive JS를 신경 쓰지 않으려면 link_to_remote를 사용하고 href를 지정하는 것이 가장 좋은 방법 일 것입니다. – zgchurch

0

나는 해결책이 "link_to_remote"에 있으며 특정 컨트롤러가 아니라고 믿습니다. 다음은 작동하는 것 같습니다.

 <div><%=link_to_remote "NEW BUILDING", {:url => {:action => "add_building", :id => site.id}}, 
      {:href => url_for(:controller => "buildings",:action => "new")}%></div> 

여러분이 더 좋은 제안이 있다면 꼭 게시하십시오. 다시 한번 감사드립니다.

0

다른 페이지로 리디렉션되도록 양식을 작성한 다음 페이지가로드 될 때 일부 js가 꺼져서 ajax-y js로 덮어 쓰게 되었습니까? 이렇게하면 js를 사용하지 않으면 페이지가 예상대로 리디렉션됩니다.

+0

올바른 방향에서 접근하고 있는지 잘 모르겠습니다. 기본적으로 항목을 추가하고 삭제할 수있는 웹 GUI를 상상해보십시오. JS가 활성화 된 경우 추가 링크를 클릭하고 새로운 "비어있는"항목을 표시하기 만하면됩니다. 그러나 JS가 사용 중지되면 항목의 새 페이지로 이동하려고합니다. 양식을 작성한 후에는 걱정할 필요가 없습니다. 결국 원래 페이지로 리디렉션하고 싶습니다. –

관련 문제