2011-04-08 4 views
7

바라건대 간단한 대답; 나는 보석을 사용하고있다 best_in_place 그리고 그것은 위대한 작품. 내가 사용 드롭 다운 메뉴를 만드는 방법을 알아 내려고 노력하고있어 내가 할 수 있기를 원하는 것은레일 3 - best_in_place 편집

:type => :select, :collection => [] 

내 사용자 모델에서 입력 한 이름의 목록을 전달합니다.

어떤 생각을하니? collection_select와 함께 사용할 수 있습니까?

답변

8

:

[ [key, value], [key, value], [key, value], ... ] 

옵션 값옵션 텍스트이다 : 컬렉션 파라미터 키/값 쌍의 어레이를 수용한다.

보기에서가 아니라 옵션 목록을 생성하려는 개체에 해당하는 모델에서이 배열을 생성하는 것이 가장 좋습니다.

best_in_place가 실행중인 것처럼 들리므로 선택 상자를 사용하여 best_in_place를 사용하여 특정 프로젝트에 대해 할당 된 사용자를 변경하려는 프로젝트보기 페이지의 간단한 예제가 있습니다. 메모리에서, best_in_place의 마스터 버전 값이 변경되었는지를 선택 상자를위한 AJAX 요청을 보내는

## CONTROLLER 

# GET /projects/1 
# GET /projects/1.xml 
# GET /projects/1.json 
def show 
    @project = Project.find(params[:id]) 

    respond_to do |format| 
    format.html 
    format.xml { render :xml => @project.to_xml } 
    format.json { render :json => @project.as_json } 
    end 
end 


## MODELS 

class User 
    has_many :projects 

    def self.list_user_options 
    User.select("id, name").map {|x| [x.id, x.name] } 
    end 
end 

class Project 
    belongs_to :user 
end 


## VIEW (e.g. show.html.erb) 
## excerpt 

<p> 
    <b>Assigned to:</b> 
    <%= best_in_place @project, :user_id, :type => :select, :collection => User::list_user_options %> 
</p> 

# note :user_id and not :user 

참고.

명심해야 할 것도 있습니다. best_in_place는 기존 레코드를 "제자리에서"편집하기위한 것이지 새 레코드를 만드는 것이 아닙니다 (이 경우 새 페이지에 대해 _form 부분에 collection_select를 사용하십시오).

+0

감사합니다. 이 작업이 가능합니다 ... OS X에서 크롬 스크롤 덕분에 예제의 마지막 부분에있는 코드를 놓치기 쉬워졌습니다. –

+2

아마도 도움이된다면 대답으로 선택해야합니다. – marcamillion

+0

이 답변을 주셔서 감사합니다. 한 가지 질문은 ... '선택'에서 '공백'옵션을 선택하는 방법은 무엇입니까? 즉 완전히 '공백'또는 '없음'또는 그와 유사한 것일 수 있습니다. – marcamillion