私は2つの属性を持ちopening_date
、closing_date
Tenderモデルにあります。インデックス ページに表示されるのは、残りの日付 ( closing_date-Date.today
) です。しかし、データベースに残日は保存されていませんが、テーブルのデータを残日順に並べて表示したかったのです。何を使えばいいですか?そのための集計関数はありますか?
Ruby 1.9.2 と Rails 3.2.2 を使用しています
//TendersController
def index
@tenders= Tender.where("company_id= ? ", current_user.company.id).order('closing_date')
/* Here I am querying the tender by closing_date but I dont want to do that. What I wanted is I just want to order by (closing_date-Date.today) which is not in the database but should be done on the fly. i.e the smallest the number it should be at the top of the table (index.html.erb) to notify the user the closing date is sooner than they think
*/
end
//入札モデル
attr_accessible :title, :buyer_name, :category, :opening_date, :closing_date, :bid_amount, :description, :status
//index.htm.erb
<table border="1" id="tender_table" >
<tr class="table_header">
<th>Title</th>
<th>Buyer Name</th>
<th>Remaining dates</th>
<th>Status</th>
<th>Bid amount</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @tenders.each do |tender| %>
<% day_diff= tender.closing_date.to_date-Date.today %>
<tr class=<%= tender.status %>>
<td><%= tender.title %></td>
<td><%= tender.buyer_name %></td>
<td >
<% if day_diff < 0 %>
<FONT COLOR="black"><%= -(day_diff).to_i %> days passed</td>
<% else if day_diff > 10%>
<FONT COLOR="green"><%= distance_of_time_in_words(tender.closing_date,Date.today) %></td>
<% end %>
<% end %>
<% if day_diff <= 10 and day_diff>=0 %>
<FONT COLOR="red"><%=distance_of_time_in_words(tender.closing_date,Date.today)+' ' %>left</td>
<% end %>
<td><%= tender.status %></td>
<td><%= tender.bid_amount %></td>
<%# tender.description %>
<td><%= link_to 'Show', tender %></td>
<td><%= link_to 'Edit', edit_tender_path(tender) %></td>
<td><%= link_to 'Destroy', tender, confirm: 'Are you sure?', method: :delete %></td>
</tr>
<% end %>
</table>