2012-09-17 1 views
0

I는 알파벳 순서로 프로젝트의 내 목록을 반환하는 선택 상자 구축을 위해 노력하고있다 : 이것은 한 이름 필드에 포함 된대로 작동루비 온 레일즈의 선택 상자 안에 문자열을 주문하는 방법

<%= f.select(:project_id, current_user.projects.all(:order => 'name').collect {|p| [ p.name, p.id ]}) %> 

을 한 단어 만 예를 들어 프로젝트.

모든 항목에 공백이 들어 있습니다. 내 프로젝트은 주문하지 않습니다. 그들은 단순히 목록의 상단에 나타납니다.

주문 방법 모든 문자열이입니까?

도움 주셔서 감사합니다.

답변

1

확인이 내가 함께 끝난 것입니다. * sort_by * 메쏘드가 구조되었습니다. 그래도이 작업을 수행 할 수있는 더 좋은 방법이 있는지 확실하지 않습니다.

0

시도 정렬 기능은

<%= f.select(:project_id, current_user.projects.all(:order => 'name').collect {|p| [ p.name, p.id ]}.sort) %> 

이 목록을 정렬합니다.

이 시도하십시오 이러한 방식

<%= f.select :brand_id, options_for_select(current_user.projects.all(:order => 'name').collect {|p| [ p.name, p.id ]}.sort), {}, :id => 'dealerships_filter_brand_id' %> 

에서 그것을 사용하여, 나는 그것을 사용했습니다 그리고 그것은 나를 위해 일했습니다. 코드가이 같은 정렬 할 수 있습니다 쌍 배열 [이름, ID],

arr.sort를 포함으로

+0

감사합니다. 그러나 여기서는 작동하지 않습니다! – Tintin81

+0

일부 오류가 발생했거나 정렬되지 않았습니다. –

+0

아니요, 오류가 전혀 발생하지 않습니다. 결과는 끝에 ".sort"가없는 경우와 같습니다. – Tintin81

0

당신은이에 대한 배열에 정렬 방법을 사용할 수 있습니다! {| a, b | a.first < => 먼저 인수 이름

첫 번째 인수에

arr.sort을 정렬 할 수있는 경우에 사용하는 것이 더 나은

를 사용하여 정렬 할 고려

} b.first! 대문자 항목이 문제의 원인이 된 것 같다

<%= f.select(:project_id, current_user.projects.all(:order => 'name').sort_by{|n| n.name.downcase}.collect {|p| [ p.name, p.id ]}) %> 

:

+0

'sort_by (& : first) '를 사용하는 것이 더 좋습니다. – tadman

+0

첫 번째 인수를 사용하여 블록이 필요없는 경우에도 정렬합니다. –

+0

사실 마찬가지입니다. 당신은 당신의 대답을 조정해야합니다. – tadman