2013-05-28 3 views
0

예를 들어, 데이터베이스에 Users와 Microposts라는 두 개의 테이블이 있습니다. 사용자 테이블은 모든 사용자를 저장하며 ID와 이름의 두 열을가집니다. Microposts 테이블은 사용자가 만든 게시물을 저장하며 id, post_content 및 user_id의 세 열을 갖습니다. 물론이 두 테이블에는 각 항목이 생성 될 때마다 타임 스탬프가 있습니다. 기본적으로 사용자가 만든 정보 (ID 및 이름)와 해당 사용자가 마지막으로 작성한 정보를 표시하는보기 페이지가 있습니다. 내가 생각하고있는 한 가지 방법은 사용자보기 페이지 (예 : app/views/Users/index.html.erb)에 바로 처리되도록하는 것입니다. 아마이ruby ​​on rails 2 열 조건에 따라 테이블 행을 얻습니다.

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

같은 사용자 테이블을 통해 루프로 이동하여 사용자 테이블을 통해 반복하면서, 사용자가 만든 최신 게시물을 얻을 수있는 user.id를 사용하고있어 이후.

두 번째 방법은 기본적으로 사용자 테이블에 최신 게시물 정보를 저장하고 데이터베이스에 트랜잭션이 발생할 때마다 업데이트하는 다른 열이 있도록 구현하는 것입니다. 따라서 최신 게시물을 구현할 때 특성으로 액세스 할 수 있습니다.

그러나 어느 방법이 더 좋고 어떤 방법으로 구현되는지 알지 못합니다. 제안이 있습니까? 미리 감사드립니다.


편집 : 죄송합니다, 오타가있다. 그것은 "두 개의 테이블과 하나의 데이터베이스"입니다.

+0

두 개의 데이터베이스를 사용하는 이유는 .. !!!!! – Jyothu

+0

하나의 데이터베이스와 2 개의 테이블을 사용하는 경우 매우 간단하게 구현할 수 있습니다. 그런 다음 테이블 관계를 사용합니다. – Jyothu

+0

첫 번째 구현을 사용하십시오. –

답변

1

사용자에 대한 VIEW 다음 페이지를 수행하지만 난 일반적으로 간과되는 느낌이 중요한 작은 조각을 추가하고 싶었다. 데이터베이스에 대한 첫 번째 호출에 연관을 포함합니다. 이에

일부 문서에 대해서는
# 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

+0

답변 해 주셔서 감사합니다. – Serllen

+0

귀하의 환영합니다! 또한 컨트롤러에 includes() 부분을 두는 것이 가장 좋습니다. –

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 
+0

답변 해 주셔서 감사합니다. – Serllen

0

사용자는 많은 마이크로 포스트를 가지고 있습니다. 그래서 즉, 응용 프로그램/뷰/사용자/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 %> 
+0

답변 해 주셔서 감사합니다. – Serllen