0

私のアプリには、ユーザー モデルと、記念日、休日、誕生日、および「その他の日付」カスタム モデルなどの他の複数の日付関連モデル/テーブルがあります。

以下に示すように、それらをすべて個別にリストするユーザー ダッシュボード ビューがあります。これらのリストをすべて 1 つ (今後のイベントなどと呼びます) に時系列で表示し、一定期間の今後の日付を表示するにはどうすればよいですか。

意見

*注 - これらは表/リストに表示されますが、わかりやすくするために html を削除しました

    <h1>Holidays</h1>
<% if @user.holidays.any? %>
  <% @user.holidays.each do |hld| %>
    <%= hld.name %>
    <%= hld.date %>
<% end %>

    <h1>Friends Birthdays</h1>
<% if @user.friends.any? %>
  <% @user.friends.each do |frd| %>
      <%= frd.name %>
      <%= frd.dob %>
  <% end %>


    <h1> Anniversary </h1>
<% if @user.anniversaries.any? %>
  <% @user.anniversaries.each do |ann| %>
      <%= ann.spouse_name %>
      <%= ann.anniversary_date %> 
   <% end %>

ありがとう!

モデル

class User < ActiveRecord::Base
 has_many :friends
 has_many :occasions
 has_many :user_holidays
 has_many :holidays, :through => :user_holidays
 has_many :anniversaries

class Holiday < ActiveRecord::Base
  has_many :user_holidays
  has_many :users, :through => :user_holidays    
end

class Friend < ActiveRecord::Base
  belongs_to :user
end


class Anniversary < ActiveRecord::Base
  belongs_to :user
end
4

1 に答える 1

1

効率的になりたいと仮定すると (配列を組み合わせて並べ替えれば完了です)、リレーションを介して直接行う方法はありません。ユーザーへの外部キーを持つイベントモデルがあると仮定しています。その場合、

Events.where(:user_id => @user.id).where(<EVENT DATE FILTERS>).order("event_date DESC")

- 編集 -

これはかなり汚いですが、これを達成するための他の直接的なデータベースの方法は考えられません。

events = @user.holidays.map{|h| [h.name, h.date, :holiday]} + \
         @user.friends.map{|f| [f.name, f.dob, :birthday]} + \
         @user.anniversaries.map{|a| [a.spouse_name, a.anniversary.date, :anniversary]}
events.map!{|event| {:name => event[0], :date => event[1], :event_type => event[2]}}
# You now have an array of hashes with the events name, date and type.

events.sort{|a, b| a[:date] <=> b[:date]}  # sort / filter
于 2012-06-13T18:37:05.880 に答える