2016-09-04 3 views
0

뷰 (erb) 파일에 드롭 다운 목록을 채우는 배열이 있습니다. 값으로 정렬 된 드롭 다운 목록의 값을 갖기를 원합니다 (이름, 성, 이름의 목록입니다. 마지막으로 정렬하기를 원합니다). 이것은 내가 가지고있는 것입니다 :레일 드롭 다운 목록 정렬 값

<% 
    if @users 
    users_arr = [] 
    @users.each do |u| 
     users_arr << ["#{u.name}", u.id] 

    end 
    end 

    first_selected_parent = @kid.users && @kid.users.first ? @kid.users.first.id : "" 
    second_selected_parent = @kid.users && @kid.users.count > 1 ? @kid.users.last.id : "" 
%> 

나는 봤지만 여러 가지를 시도했지만 아직 알아 내지 못했습니다. 감사!

답변

0

왜 여기에 배열을 사용하고 있습니까? 내장형 ActiveRecord::Collection 개체를 사용하십시오. 개체는 거의 배열과 비슷하지만 모든 ActiveRecord 메서드를 사용할 수 있습니다. 이 코드 :

User.all.order(:last_name => :desc) 

는 모든 User 기록을 잡고, 및 내림차순으로 last_name 필드에 의해 그들을 정렬합니다. 당신은 .each를 사용하여 결과를 반복 할 수 있습니다 폼의 일환으로 HTML <select> 요소를 채울하려는 경우

@users = User.all.order(:last_name => :desc) 
@users.each do |user| 
    # do stuff 
end 

이 모든 이상한 배열 조작을 생략하고 사용 레일 '폼 헬퍼 :

users_arr.sort : 는
<%= form_for @resource, url: form_submission_path do |f| %> 
    <%= f.select :field_name, options_for_select(User.all.order(:last_name => :desc).map{|u| [u.last_name, u.id]}) %> 
<% end %> 
+0

글쎄, 나는 정확히 내가 다른 코드 사람을 편집하기 위해 노력하고있어 확실하지 않다 개발했다. 드롭 다운 상자의 선택이 데이터베이스를 업데이트하는 양식과 함께 제출 되었기 때문에 그것이 궁금합니다. 코드의이 부분을 첫 번째 게시물에 남겨 놓았다는 것을 깨달았습니다. –

+0

@PeterFulton 여기에 HTML ''요소를 채우려한다고 가정합니다. – ArtOfCode

+0

맞습니다. –

0

가장 간단한 대답은 sort 방법을 사용하는 것입니다 그러면 각 항목의 첫 번째 요소에 정렬 된 배열이 반환됩니다.

irb(main):129:0> users_arr 
=> [["Watson", 1], ["Olson", 2], ["Peters", 3], ["Warren", 4]] 
irb(main):130:0> users_arr.sort 
=> [["Olson", 2], ["Peters", 3], ["Warren", 4], ["Watson", 1]] 

새 (분류) 배열을 생성합니다 (! 문자 제외) 자리에 배열 또는 sort을 정렬 sort!를 사용할 수 있습니다.

전체 구문 (예를 들어, 각 항목의 두 번째 요소에 정렬하기)를 <=> 연산자를 사용합니다 :

irb(main):132:0> users_arr 
=> [["Olson", 2], ["Peters", 3], ["Warren", 4], ["Watson", 1]] 
irb(main):133:0> users_arr.sort {|a,b| a[1] <=> b[1]} 
=> [["Watson", 1], ["Olson", 2], ["Peters", 3], ["Warren", 4]] 
관련 문제