2015-02-10 56 views
0

我试图在显示用户表时为每个User获取最后一个Programme。 (User有一个ProfileProfile属于User获取轨道中每个用户的最后一项

在我的控制,我得到的所有程序,像这样:

@programmes = Programme.all

<table> 
<% @profiles.each do |profile| %> 
    <tr> 
    <td> 
    <% @programmes.each do |programme| %> 
     <% if programme.client == profile.user.id %> 
     <%= programme.description %> 
     <% end %> 
    <% end %> 
    </tr> 
<% end %> 
</table> 

但我怎么得到最后程序为每个用户?

谢谢!

+0

是什么意思最后一个程序?你能给出关于用户的最后一个程序的标准吗?用户和程序之间的联系是什么? – utnas 2015-02-10 02:01:05

+0

这只是一对多的关系,我只是想创建最后一个,但在一个循环中,我不能在加载页面时使用每个user.id来完成我的请求,或者我可以,而这正是我期待的for;) – aimozs 2015-02-10 02:13:49

回答

1

考虑您的设置,这里是你如何能显示最后程序为每个用户:

<table> 
    <% @profiles.each do |profile| 
    <% user = profile.user 
    <% last_programme = user.programmes.last %> 
    <tr> 
     <td><%= last_programme.try(:description) %></td> 
    </tr> 
    <% end %> 
</table> 

http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-last

+0

如果'user'没有'programme',在'last_prgramme'上调用'description'会产生错误 - 你可以通过'try'方法来检索'description'。 – 2015-02-10 02:58:27

+0

如果您只想显示拥有'programme'的用户,则应该修改控制器,以便为拥有程序到'@ profiles'变量的用户分配配置文件。然后你可以使用'try'来消除。 – 2015-02-10 03:01:55

1

找到最后的记录,你可以只调用.last

你可以也致电.first.second.third

ActiveRecord::FinderMethods

Person.last # returns the last object fetched by SELECT * FROM people 
Person.where(["user_name = ?", user_name]).last 
Person.order("created_on DESC").offset(5).last 
Person.last(3) # returns the last three objects fetched by SELECT * FROM people. 

在你的情况<% user.programmes.last %>会做的伎俩

相关问题