Ruby를 처음 사용하고 다른 사람이 작성한 코드로 작업하고 있습니다. 사용되지 않는 버전 인 Ruby 1.8.7 및 Rails 2.3.5는 개발 도상국의 자선 단체이며 업그레이드 할 수있는 역량이 없기 때문에 작업해야합니다.Ruby-on-Rails - 정렬 된 테이블 표시 문제
나는 표 (약품 목록)를 작성하고 약의 이름으로 분류해야하는 보고서가 있습니다.
은 관련 제어 코드는 다음과 같다 :
all_drugs = Drug.find(:all,
:order => "name ASC")
@stock = {}
all_drugs.each{ |drug|
drug_id = drug.drug_id
first_date = Pharmacy.active.find(:first,
:conditions =>["drug_id =?",drug_id],
:order => "encounter_date").encounter_date.to_date rescue nil
next if first_date.blank?
next if first_date > @end_date
start_date = @start_date
end_date = @end_date
stock_at = Pharmacy.stock_at(drug_id,end_date)
if stock_at > 0
last_activity = "In stock"
else last_activity = Pharmacy.last_activity(drug_id,end_date)
end
drug = Drug.find(drug_id)
drug_name = drug.name
@stock[drug_name] = {"dispensed" => 0,"stock_at" => 0,"removed" => 0, "receipts" => 0,"prescribed" => 0,"last_activity" => 0}
@stock[drug_name]["dispensed"] = Pharmacy.dispensed_drugs_since(drug.id,start_date,end_date)
@stock[drug_name]["stock_at"] = stock_at
@stock[drug_name]["removed"] = Pharmacy.total_removed(drug.id,start_date,end_date)
@stock[drug_name]["receipts"] = Pharmacy.total_delivered(drug.id,start_date,end_date)
@stock[drug_name]["prescribed"] = Pharmacy.prescribed_drugs_since(drug.id,start_date,end_date)
@stock[drug_name]["last_activity"] = last_activity
}
관련 도면 부호는 다음과 같다 :
<%count = 1
@stock.each{|name,values|
prescribed = values["prescribed"]
receipts = values["receipts"]
dispensed = values["dispensed"]
removed = values["removed"]
stock_at = values["stock_at"]
last_activity = values["last_activity"]
%>
<tr>
<td class="color_<%=color%>"><%=name%></td>
<td class="color_<%=color%> caldata" id="stock_at_<%=count%>"><%=stock_at%></td>
<td class="color_<%=color%> caldata" id="removed_<%=count%>"><%=removed%></td>
<td class="color_<%=color%> caldata" id="prescribed_<%=count%>"><%=prescribed%></td>
<td class="color_<%=color%> caldata" id="dispensed_<%=count%>"><%=dispensed%></td>
<td class="color_<%=color%> caldata" id="last_activity_<%=count%>"><%=last_activity%></td>
<td class="color_<%=color%> caldata" id="receipts_<%=count%>"><%=receipts%></td>
</tr>
<% count+=1
}%>
이 게 적절한 테이블을 생성하지만 임의의 순서로합니다 (재 시작을 서버를 다시로드하고 페이지를 다시로드하면 테이블이 새로운 순서로 제공됩니다).
나는 온라인에서 다양한 옵션을 시도했다. 내가 @stock.all.order
(레일즈 2.x에서 작동하지 않는다), @stock.find
(:all
및 :order
을 사용하지 않고 단지 :order
을 사용하면 도움이되지 않는다), @stock.sort
(효과 없음) 및 @stock.sort_by
(효과 없음)을 시도했다. . 모든 코드는 컨트롤러 코드의 끝이나 뷰 코드의 @stock.each
바로 앞에 있습니다.
나는 특히 순서는 무작위입니다 당황하고 말해야한다 - 내가 이름을 주문하지 못하는 경우에도, 순서는 여전히 일관 될 것이라고 추정했을 것이다 ...
어떤 도움 것 대단히 감사하겠습니다!
에 선
을 변경? –
네, 고맙습니다. @stock에서'.sort'와'.sort_by' 두 가지를 시도해 봤습니다 - 그 질문을 명확히하기 위해 업데이트하겠습니다. 나는 간단한 @ stock.sort를 시도했다.뿐만 아니라 '@stock.sort_by {| a | a [0]}'및'@ stock.sort {| a, b | b [: name] <=> [: name]}',이 사이트에서 발견 한 다른 답변을 기반으로합니다. 아무도 일하지 않았지만 물론 구문이 잘못되었을 수 있습니다. 특히 나는 @stock 배열의 구조와 색인을 완전히 이해하고 있다고 확신하지 못한다. – Phueal
'@ 스톡 '은 배열이 아닙니다. Hash :'@stock = {}'로 선언 된 인스턴스 변수입니다. 아마 당신은 '@stock.sort_by {| k, v | v}', 아니면 그냥'@stock.keys.sort.each {| k | }' –