2010-01-06 2 views
1

레일에 새내기. 간단한 서점 응용 프로그램을하고 있어요. 우리는 물리학, 화학, 철학 등 다른 주제 영역을 가지고 있습니다 ... 각 주제 영역 아래에 책이 있습니다. 북/목록으로 끝나는 URL은 주제 영역과 관계없이 모든 책을 나열합니다. 주제 영역은 하이퍼 링크와 동일한 페이지에도 나타납니다. 으로 끝나는 url 책/show_subject/< 주제 ID >은 해당 주제 ID가있는 모든 책을 나열합니다. 그래서 해당 주제 영역에 속한 책을보고 싶으면 제목을 클릭하십시오. 도서/목록 페이지에는 새로운 도서를 추가 할 수있는 페이지에 대한 하이퍼 링크가 있습니다 (도서/신규).ruby ​​on rails : 선택/드롭 다운 상자에 기본값으로 페이지로드

해당 제목의 도서가 없으면 물리라는 말을 사용하여 여기에 도서를 추가하겠습니까?? 그것을 클릭하면 책 정보 (book/new)를 입력하는 페이지로 이동합니다. 주제 영역에 대한 드롭 다운이 있습니다 ... 처음에는 물리학을 나타 내기 위해이 드롭 다운을 구성하는 방법 (저장소에 물리학이 없다는 사실을 알게 된 후이 페이지로 이동했기 때문에).

class BookController < #... 
    def new 
    @book = Book.new(:subject_id => params[:book_subject_id]) 
    #... 
    end 
    #... 
end 

이 선택한 주제를 가진 책 AR 객체를 생성합니다 :

답변

0

옵션은

/book/new?book_subject_id_=1 

에 대한 링크 점을이 라인 컨트롤러의 선택을 잡을 수 .

이 그런 다음보기에서 양식이 @book에 동의 정의 될 것이다, 뭔가 같은 :

<% form_for @book, :url => your_create_url, :method => { :post } do %> 
    <%= f.collection_select :subject_id, Subject.all.map{|s| [s.name, s.id]} %> 
... 

중요한 부분은 값을 검색 할 수 있도록 그 책 개체의 subject_id 메소드를 호출 당신 요청에 설정합니다.

선택이

물리학 대상으로 선택합니다 이런 식으로 :

+0

어떻게 링크를/book/new로 만들 수 있습니까? book [subject_id] = 1? <% = link_to '를 추가 하시겠습니까?', {: action => 'new'}, {: default_subject => @ subject.name} %> – deostroll

+0

죄송합니다. BookController의 새 액션에서 처리 할 항목이 없는지 알려주십시오. – makevoid

+0

여기에서 오류가 발생했습니다. <% = collection_select : id, Subject.all.map {| s | [s.name, s.id]} %> 잘못된 숫자의 인수 (5는 2)입니다. 추신 : 나는 당신이 말한 것처럼 여전히 링크를 만들 수 없습니다 ...내가 렌더링하려고 할 때마다/book/new/1 또는 book/new/2와 같은 주제에 따라 달라집니다. – deostroll

0

보통 당신은 GET 요청에 매개 변수를 추가하여이 작업을 수행 할 것이다 (참고 다음 레일 규칙 책은 컨트롤러와 URL을 책되어야한다). 당신은 당신의 양식을 전혀 변경할 필요가 없습니다

class BookController < ActiveRecord 
    ... 
    def new 
    @book = Book.new 
    if param[:default_subject] 
     @book.subject = Subject.find_by_name(param[:default_subject]) 
    end 
    end 
    ... 

:

link_to new_book_path, :default_subject => @subject.name 

그런 다음 컨트롤러 액션에, 당신의 새로운 개체에 매개 변수를 지정 : 당신은 당신의 링크에이 방법을 추가 할 수 있습니다 왜냐하면 일반 폼 태그 도우미를 사용하는 경우 @book 개체를 사용하여 기본값을 할당하기 때문입니다. 예 :

<% form_for @book do |form| %> 
    <%= form.collection_select :subject_id, Subject.all, :id, :name %> 
    .. other fields .. 
<% end %> 
+0

안녕하세요,이 컨트롤러의 new.html.erb 페이지를 작성하는 방법은 무엇입니까? – deostroll

+0

에는 양식을 작성하는 방법의 예가 추가되었습니다. – jamuraa