2016-06-22 14 views
0

私はprogramテーブルを持っています。belongs_to userprofileuserprofileテーブルはhas_many programsです。プログラムにはprogram_yearカラムがあり、ユーザーが複数のプログラムを所有している場合は、そのプログラムのうち最も早い年(そのprogram_yearの値)を表示したかったのです。ユーザーが所属するプログラムの最古の年(値)を表示する方法を教えてください。

私は同様の質問と回答(How to get earliest and latest dates for associated objects)を探しました。しかし、私のディスプレイが適切に動作するように見えることはできません。

各userprofileのプログラムから最低限のprogram_yearを取得する方法がわかりません。私が今持っているコードは、現在のユーザーの最小program_yearを返します。それはループしているからです。年xの時間を表示します。

members_controller.rb

def index 

    @userprofiles = Userprofile.all 
    # the use of current_user is incorrect.. 
    @member_program = Uprogram.where(:userprofile_id => current_user.userprofile.id).all 
    @member_since = @member_program.min 

end 

index.html.erb

<% f.uprograms.each do |program| %> 
    <% if program.present? %> 
    <!-- just want to display the lowest program_year value) 
    Member since: <%= program.program_year %> 
    <%= @member_since.program_year %> 
    <% end %> 
<% end %> 

任意の洞察力が役立つだろう!ありがとうございました。アイデアの

+0

あなたはmysqlグループ 'Userprofile.joins(:uprograms).group(:userprofile_id).select(" user_profile。*、min(program_year)as member_since ")を使ってこのように試すことができます。 –

+0

@VishalJAINねえ、これを完全に理解するかどうか分からない。このコードは、プログラムとuserprofileテーブルをidで結合しますか?それから、member_sinceとしてuserprofileに基づいてprogram_yearの分を返します。それはmembers_controllerに属し、変数に格納されますか?その後、表示されますか?申し訳ありませんが、多くの質問があります.. – teresa

答えて

1

カップル:

1 - これは、すべてのユーザプログラムの中で、あなただけ早いprogram_yearを取得します:

current_user.userprofile.programs.order(:program_year).limit(1).first 

Uprogram.where(userprofile_id: current_user.userprofile.id).order(: program_year).limit(1).pluck(:program_year).first 

2-これはあなたに早いUprogramオブジェクトを提供します

+0

実際には、私は気づいた.. 'current_user.userprofile.id'は私にcurrent_userの最も早い' program_year'を与え、それは間違っているすべてのユーザーのその年を表示しています。 '@member_since = Uprogram.where(:userprofile_id => f.id).minimum(:program_year)'これはビューで使用されています。 – teresa

関連する問題