rails上的ruby按两列条件获取表行

时间:2013-05-28 06:55:50

标签: ruby-on-rails ruby database database-design

例如,我在数据库中有两个表,Users和Microposts。 Users表存储所有用户,并有两列,id和name; Microposts表存储了用户发布的帖子,并有三列:id,post_content和user_id(当然,这两个表在创建每个条目时都有时间戳)。基本上我想要的是有一个视图页面,显示存储在Users(id和name)中的信息以及相应用户创建的最后一篇文章。 我正在考虑的一种方法是在用户视图页面(例如,位于app / views / Users / index.html.erb中)处理它。因为我可能会像这样循环遍历Users表

<% @Users.each do |user| %>
    id = user.id
    <!-- Do such and such -->
<% end %>

在循环访问Users表时,使用user.id获取用户发布的最新帖子。

第二种方法是基本上实现这样,Users表有另一列存储最新的帖子信息,并在每次对数据库进行事务时更新。因此,当实现最新的帖子时,可以作为属性进行访问。

但是,我真的不知道哪种方式更好,也不知道如何实现这两种方式...... 有什么建议吗? 提前谢谢!


编辑: 对不起,有一个错字。它是“两个表和一个数据库”

3 个答案:

答案 0 :(得分:1)

与其他答案类似,但我想添加一个我觉得常被忽视的重要小片。在第一次调用数据库时包括关联。

# not sure the scale of your project but I would paginate @users
# by using includes you prevent the N+1 issues
<% @users.includes(:microposts).each do |user| %>
    id = user.id
    user.microposts.last
<% end %>

关于此的一些文件:
http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

答案 1 :(得分:0)

    class User 
        has_many :microposts
    end

    class Micropost
        belong_to :user
    end

   # to get user's post 
   # for single user
    @user.microposts
   # for many users
    @users.each do |user|
        user.microposts.each  do  |post|
            post.post_content
        end
    end

答案 2 :(得分:0)

您的用户有很多微博。所以在用户视图页面上执行以下操作,即app / views / Users / index.html.erb

<% @Users.each do |user| %>
    id = user.id
    last_post = user.microposts.last <!-- This will give you last post created by the user -->
<% end %>