0

たとえば、データベースにユーザーとマイクロポストの 2 つのテーブルがあります。Users テーブルにはすべてのユーザーが格納され、id と name の 2 つの列があります。Microposts テーブルには、ユーザーによる投稿が保存され、id、post_content、user_id の 3 つの列があります (もちろん、これら 2 つのテーブルには、各エントリが作成されたときのタイムスタンプがあります)。したがって、基本的には、ユーザーに保存されている情報 (ID と名前) と、対応するユーザーによって作成された最後の投稿を表示するビュー ページが必要です。私が考えている 1 つの方法は、ユーザー ビュー ページ (たとえば、app/views/Users/index.html.erb にあります) で処理することです。おそらく、このように Users テーブルをループするので

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

また、Users テーブルをループしながら、user.id を使用して、ユーザーが作成した最新の投稿を取得します。

2 つ目の方法は、基本的に、Users テーブルに、データベースへのトランザクションが行われるたびに最新の投稿情報と更新を格納する別の列があるように実装することです。したがって、最新の投稿を実装するときは、属性としてアクセスできます。

ただし、どちらの方法が優れているか、どちらの方法で実装するかはよくわかりません...何か提案はありますか? 前もって感謝します!


編集:申し訳ありませんが、タイプミスがあります。それは「2 つのテーブルと 1 つのデータベース」です。

4

3 に答える 3

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

于 2013-05-28T07:35:45.587 に答える
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 %>
于 2013-05-28T07:19:56.467 に答える
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
于 2013-05-28T07:05:05.110 に答える