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
を試してみました。@stock.find
(:all
と:order
の2つの引数を受け入れず、ちょうど:order
を使用しても役に立たない)、@stock.sort
(効果なし)、@stock.sort_by
(効果なし) 。これらのすべては、コントローラコードの最後またはビューコードの@stock.each
の直前に配置されます。
私は特に順序はランダムであることに困惑していますと言っている - 私は名前でそれを注文することができなかった場合でも、注文はまだ一致するであろうと推測しているだろう...
どれでも役立つだろう非常に感謝される!
にライン
を変更するには、.sortを試してみましたか? –
ありがとう、ありがとう、@stockで '.sort'と' .sort_by'の両方を試しました - それを明確にするために質問を更新します。私は単純な@ stock.sortを試しただけでなく、 '@stock.sort_by {| a | a [0]} '、および' @ stock.sort {| a、b | b [:name] <=> a [:name]} '、これは私がこのサイトで見つけた他の回答に基づいています。いずれもうまくいきませんでしたが、もちろん私は構文が間違っているかもしれません。特に、@stock配列の構造と索引付けを完全に理解しているとは確信していません。 – Phueal
'@ stock'は配列ではありません。インスタンス変数で、ハッシュとして宣言されています: '@stock = {}'。おそらく '@stock.sort_by {| k、v | v} '、または' @stock.keys.sort.each {| k | } ' –