2013-12-21 144 views
1

假設這些模型:存儲數據

class User < ActiveRecord::Base 
    has_many :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :user 
    has_many :sections 
end 

class Section < ActiveRecord::Base 
belongs_to :post 
has_one :user, :through => :post 
end 

假設此控制器:

class SectionsController < ApplicationController 
    def latest_sections 
    @sections = Section.select(:name, :position, :updated_at) 
         .where(:public => true) 
         .order("updated_at DESC") 
         .limit(5) 
    end 
end 

最後這個觀點:

<ul> 
    <% @sections.each do |section| %> 
    <li> 
     <h1>Section updated on: <%= section.updated_at %></h1> 
     <%= section.position %> - <%= section.name %> 
     <% post = section.post; user = section.user %> 
     From Post: <%= link_to post.name, post %> 
     By User: <%= link_to user.username, user %> 
    </li> 
    <% end %> 
</ul> 

我的問題:

這會導致我在each循環的每個循環的視圖中聲明的postuser變量的多個數據庫調用。

有沒有辦法對我來說,包括所有只有我需要的代碼上面的信息與一個單一的數據庫調用工作,並把它存儲在@sections變量(我假設這將與連接的工作原理)。

爲了話,我想在@sections變量這些信息存儲在一個數據庫調用:

  • 節的name
  • 節的updated_at
  • 節的position
  • 部分的用戶username
  • 該用戶的url_for
  • 節的這篇文章的name
  • 節的這篇文章的url_for

我將如何獲得這些信息?

(注:這一切都不是針對我的情況,它只是一個更大的場景一般示例)

回答

0

在我看來,你是問有關包括選項。

Section.includes(:posts, :user).find(1) 
+0

是的,但是這會存儲所有'post'和'user'字段。指定我在查詢中需要的字段不是更有效嗎?還是我浪費精力試圖找出這個字段?謝謝。 – user2985898