2010-01-24 5 views
0

저는 Ruby on rails을 처음 사용하여 체크 박스가있는 목록이있는 양식을 작성했습니다. params를 사용하여 확인 된 값을 얻는 방법을 묻는 질문에 나는 작동하도록했습니다. 아이디어는 이제 버튼을 클릭하면 선택한 항목으로 일부 작업을 수행하고 다른 작업을 클릭하면 다른 작업을 수행하지만 다시 게시 한 후에는 항상 같은 페이지에 머물러있게됩니다.양식을 제출 한 후 문제가 발생했습니다.

지금 무슨 일이 벌어지고 있는지, 나는 행동으로 가고 있지만, 동시에 다른 URL로 가고있다. 예를 들어 :

나는 내보기에 다음과 같은 형태를 가지고 :

form_tag delete_profiles_path, :method => :put do 
    submit_tag 'Delete' 

    @my_announcements.each do |ann| 
     check_box_tag 'announcement[]', ann.id 
     end 
    end 

내 프로필 컨트롤러 :

def delete 
    #some action 
    end 

그리고 routes.rb :

map.resources :profiles, :collection => {:delete => :put} 

이 의지 제출 후 나를 리디렉션합니다.

/전체 프로필/내 양식/신분증/내-발표

/프로파일에있다.

또한 삭제 버튼과 같은 다른 버튼을 추가하면 클릭 할 때 여러 작업을 처리 할 수 ​​있지만 같은 URL에 머물러있게하려면 어떻게해야합니까?

+0

다른 버튼은 무엇을 할 수 있습니까? – tfwright

+0

그것은 단지 예일뿐입니다. 컨트롤러에서 "삭제", "편집"또는 기타 "표준"방법과 같은 기능에 집중하지 마십시오. 목록에서 항목을 선택한 다음 일부 단추를 클릭하고 포스트 백 이후에 동일한 페이지에 머물러있는 작업을 수행하려고합니다 (첫 번째 대답 아래의 주석에 말한 것처럼). –

답변

0

우선 PUT으로 삭제하고 HTTP 메소드를 삭제하지 않는 이유는 무엇입니까? 기본 삭제 방법을 사용해야합니다. :method => :delete을 사용하고 컨트롤러에 #destroy 액션을 사용하십시오 (delete도 사용할 수 있지만 원하는 작업을 표시하는 데는 새로운 기능이며 destroyupdate과 같습니다).

양식을 제출하는 데 사용 된 두 번째 이름은 params으로 전송되므로 양식을 제출하는 데 사용 된 버튼을 구별 할 수 있습니다.

Thirt - Rails에서 '같은 페이지에 머물러서는 안된다'(또는 가능하지만 레일스와 비교하여). 그것은 다음과 같이해야한다 :

  1. 이 컨트롤러 행동 양식을 제출, 대부분의 시간 POST (URL이 '/ 정보 /'또는 '/ 정보/ID'와 동일하고 액션이 뛰어난 BU 방법입니다, PUT 또는 DELETE)

  2. 작업을 구분하고 작업을 완료하십시오. 가능하지 않은 경우 (예 : 유효성 검증 오류), 실제 값이있는 동일한 양식과 완료 할 수없는 이유를 보여주는 오류를 표시하십시오. 사용자가 페이지를 새로 고침하고 매개 변수를 다시 제출하면 동일한 페이지 및 동일한 오류가 발생하며 작업이 완료되지 않아야합니다.

  3. 이 컨트롤러가 요청을 완료 한 경우 다른 페이지로 리디렉션하십시오. 사용자가 페이지를 새로 고치면 리디렉션 된 경우 아무 일도 일어나지 않기 때문에 새로운 페이지를 다시 가져옵니다. 사용자를 리디렉션하지 않으면 두 번째로 동일한 작업을 수행하게되며 이는 항상 원하는 작업이 아닙니다.이 새로운 페이지는 다음과 같이

    내가 부분적으로 사용하여이 아약스를 해결할 수, 형태는 물론

+0

좋습니다. 사용자가 체크 박스를 선택하여 목록에서 항목을 선택할 때 몇 가지 작업을 수행하고 싶습니다. 그들이 원하는 버튼을 클릭하면 (삭제가 예를 든 것입니다.) 웹 사이트가 동일한 페이지에 머물러 있기를 원합니다. 내가 바라는 것이 미친 것은 아닙니다. Gmail을 사용하고 있는데 5 개의 항목을 선택한 다음 보관을 클릭한다고 가정 해 보겠습니다. 다른 URL로 리디렉션되지 않으면 이전과 동일한 URL로 이동하게됩니다. 나는 그 일을하고 싶다. 감사. –

+0

@Brian Gmail이 동일한 페이지에 남아있을 것이라고 확신하십니까? 나는 '기본 HTML'(기본 HTML을 사용하고 멋진 JavaScript는 사용하지 않음)을 선택하고 제출 한 후 리디렉션합니다. 따라서 나에게 대답과 같이 표시됩니다. 이것에 대해 RESTfull URL을 사용하지는 않지만 또 다른 이야기입니다. 페이지를 다시로드하지 않고도이 작업을 수행하려면 Ajax가 필요하지만 좀 더 복잡합니다. – MBO

+0

음, "fancy"버전을 사용하고 여러 이메일을 선택한 다음 "읽은 상태로 표시"를 클릭하면 아약스로 작업하게됩니다. 그래서, 다시, 내 질문은 어떻게 양식 내에서 여러 아약스 제출할 수 있습니까? –

0

음의에서 제출 된 페이지 수 있습니다 :이 위대한 작품을

remote_form_for :profile, :url => {:controller => 'announcements', :action => 'deactivate'}, :html => { :method => :put} do |f| 
    f.submit 'Publish', :confirm => 'Are you sure?' 

. 지금 내가하고 싶은 것은 여러 개의 액션을 수행 할 수 있도록 다른 "제출"또는 버튼을 추가하는 것입니다. 따라서 remote_form_for의 url 문은 각 버튼마다 이와 같이 바뀝니다. 예 :

게시 버튼 : 일부 컨트롤러에서 일부 작업을 수행합니다. 비활성화 버튼 : 다른 버튼을 수행하십시오.

분명합니까?

관련 문제