大大们,最近在做一个ROR的程序,很多问题都是自己一个人解决的,有些实在不是很好想明白,特来请教,需求描述如下:

在论坛或者别的上面程序中,首页都会显示各个论坛板块的最新的帖子,请问这个是怎么实现的,
按照我的设想,应该是这个的:
@posts=Post.find(:all,:order=>"forum_id,create_at DESC" )
然后在显示的时候按照forum_id来显示各自板块的最新帖子,但是这个在RHTML中怎么取出最新的帖子呢??

我只能完全遍历,如下:
<% @posts.each do |post| %>
<%= post.title %>
<% end %>

这样就会全部显示出来,而我想要得只是每个板块的最新的那一个帖子,希望指教一二,谢了...
评论
maozhua 2006-12-17
class Forum < ActiveRecord::Base  
    has_many :posts,:order => 'posts.created_at desc'  
    has_one :last_post,:order => 'posts.created_at desc'
end 

Forum.find(:all, :include=>:last_post)
iceskysl 2006-12-16
to:aguang3190076
你的建议让我的思维更加灵活,谢谢!

to:myaniu
你的方法如此详细,让我感动,谢谢!

看来我自己的思维还不够Ruby..多谢大家指导...
myaniu 2006-12-16
这样也许好一点:
forums = Forum.find :all
@last_post_of_forum = []
for forum in forums
   @last_post_of_forum << Post.find :first,:conditions=>['forum_id=?',forum.id],:order => "create_at DESC",:limit => 1
end



或者你可以在models 中设置(参考自beast)。
class Forum< ActiveRecord::Base
   has_many :posts,:order => 'posts.created_at desc' do
     def last
        @last_post ||= find(:first, :include => :user, :limit => 1)
     end
   end
end

class Post< ActiveRecord::Base
      belongs_to :forum
      belongs_to :user
end


views/form/index.rhtml
<td class="inv lp">
      <% if forum.posts.last %>
        <%= time_ago_in_words(forum.posts.last.created_at) %><br />
        by <strong><%= h(forum.posts.last.user.display_name) %></strong>
      <% end %>
    </td>
aguang3190076 2006-12-16
Post.find_by_sql("select *,max(create_at) from post group forum_id"
个人参考
iceskysl
搜索本博客
我的相册
6e4b1028-c838-4ae2-9808-316c7a60e315-thumb
111
共 1 张
最近加入圈子
存档
最新评论