2013-08-12 3 views
-4

을 때 form_tag 사용하여 ID를 전달하여 문서를 제거 book.rb 여기의 내가 책 모델을 가지고 있다고 가정 해 봅시다

class Book 
    include Mongoid::Document 
    field :book_id, type: String 
    field :title, type: String 
end 

은 (내가 mongoid을 사용하고 있습니다,하지만 난 그게 중요하지 않습니다이 질문에 대한 생각 데이터의 유형입니다.)

book 모델은 자체 컨트롤러, 뷰,

지금, 나는 때 form_tag있는 페이지를 만들려면 등 (이) 적절한 방법이 아닌 경우 알려 주시기있다, 책의 ID를 입력하고 I를 클릭하여 이 id 주어진 데이터베이스에서 레코드를 제거 할 수 있습니다.

remove.html.erb : 나는 주어진 문서를 제거 할 수 있지만 제거 할 논리를 넣어 양식과 장소에 입력 된 값을 전달하는 방법을 알아낼 수있는 방법을 알고

<%= form_tag books_path, :method => 'get' do %> 
<p>book_id: 
    <%= text_field_tag :book_id, params[:book_id] %> 
    <%= submit_tag "Remove", :name => nil, :confirm => "Are you sure?" %> 
</p> 
<% end %> 

문서.

enter image description here

+1

삭제를 위해 GET 요청을 사용하지 마십시오./ – sevenseacat

+0

@sevenseacat 조언을 주셔서 감사합니다. – Askar

답변

3

첫 번째 사항이 먼저입니다. Book 모델에 book_id을 저장해야하는 이유는 무엇입니까? 몽고 이드는 이미이 목적으로 _id 필드를 제공합니다.

리소스를 파괴하는 일반적인 방법은 DELETE HTTP 요청을 만들어 컨트롤러에서 destroy 액션을 수행하는 것입니다.

class BooksController 
    def destroy 
    Book.find(params[:id]).destroy 
    redirect_to :back 
    end 
end 

그런 다음 단순히 다음과 링크를 수행 @book이 책 인스턴스입니다

link_to "Delete", book_path(@book), method: :delete 

.

+0

감사합니다. mongodb에서 "_id"필드를 알고 있습니다. 그것은 여기에 주어진 예일뿐입니다. 그러나 단순히 삭제하는 것 이외의 다른 작업을 수행하려면 어떻게해야합니까? 컨트롤러가 여전히 그런 논리를 두는 가장 좋은 장소인가? – Askar

+0

필요에 따라 "스키니 컨트롤러, 팻 모델"레일 원리를 따라야합니다. 컨트롤러는 인스턴스 메서드를 렌더링하고 호출하는 일에만 책임을 져야합니다. 논리를 모델에 넣으십시오. –

+0

귀하가 보여준 한 줄 코드는 remove.html.erb 코드에 추가해야합니까? 내가 오해하고 있다면 내 코드와 함께 보여줄 수 있습니까? – Askar

관련 문제