私はルビーとレールにかなり慣れていないので、最初のアプリケーションを構築しています。すべてのエージェント契約を調べて、最も早く期限が切れる順に並べ替えるメソッド (enroll_again) があります。このメソッドは、[[Agentname, numdays]] を含む 2 次元配列を返します。すべてのアカウントのすべての契約に対して、このメソッドをより高いレベルで実行しようとしています。
<% @accounts.each do |account| %>
<% account.contracts.enroll_again.each do |x,y| %>
<li>
<%= "#{y} Days remain on \n #{x}" %>
</li>
<%end%>
<%end%>
上記のコードは、アカウントに固有の並べ替えられた要素のリストを返しますが、リスト全体は並べ替えられていません。enroll_again によって返されたすべての要素を別の配列に入れようとしましたが、常に空のリストを返すため、構文が間違っているに違いありません。
編集 :
def self.enroll_again
d= Date.today
contract = Contract.all
temp = contract.map do |x|
[
Account.where(:accounts => { :id => x.account_id }).first.name),
((Date.strptime(x.startd,'%m/%d/%Y') + x.duration.months)-d).to_i
]
end
temp.sort_by{|x,y|y}
end