好吧..我是Rails的新手,我知道這已經被問過,但我仍然對如何解決以下常見問題感到困惑。我可以讓協會工作,但神奇地工作,並開始有壞習慣的軌道是不是我想做的事情。爲has_many和belongs_to創建Rails模型關聯
假設我正在構建博客。我有兩個資源:文章和用戶。每個用戶都有很多文章和每篇文章屬於一個用戶:
rails g scaffold User name:string email:string
rails g scaffold Article user_id:integer title:string content:string
用戶模型:
class User < ActiveRecord::Base
has_many :articles
end
文章型號:現在
class Article < ActiveRecord::Base
belongs_to :user
end
,對我的文章的索引,我可以這樣做:
…table headers...
<% @articles.each do |article| %>
<tr>
<td><%= article.user.name %></td>
<td><%= article.title %></td>
<td><%= article.desc %></td>
<td><%= article.content %></td>
<td><%= link_to 'Show', article %></td>
<td><%= link_to 'Edit', edit_article_path(article) %></td>
<td><%= link_to 'Destroy', article, confirm: 'Are you sure?', method: :delete %></td>
</tr>
<% end %>
</table>
我所需要的用於用戶名的模型關聯將在respond_to之前的索引操作上放置「@articles = Article.all」。很酷!
如果我想在我的主頁上使用我的Home控制器上的索引操作列出所有這些文章(我正在跳過分頁,爲簡單起見),該怎麼辦?
我知道我可以做這樣的事情在家庭控制器:
class HomeController < ApplicationController
def index
@articles = Article.joins(:user)
end
end
...然後我可以在我的首頁 - >索引視圖訪問這些數據:
<div class="row">
<% @articles.each do |article| %>
<div>
<h3><%= link_to article.title,
:controller => "articles", :action => "show", :id => article.id %></h3>
<small>Posted on <%= article.created_at %> by
<a href="#"><%= article.user.name %></a></small>
</div>
<% end %>
</div>
首先問:訪問所有文章的用戶數據時,我應該使用a:joins還是:includes?看起來他們都工作,但我想知道在這種情況下哪一個是正確的,哪一個通常表現得更快。
@articles = Article.joins(:user)
航班嗎
@articles = Article.includes(:user)
第二個問題:在我的腳手架條(建設遷移),我應該用USER_ID:整數或用戶:引用。他們做同樣的事情,還是比其他人更喜歡?如果我使用:integer作爲字段類型,建議我還爲它添加一個索引(add_index:articles,:user_id)?我發現了一個很好的RailsCast,它的解釋很棒,但我想知道其他人是否有其他意見。
如果有幫助,我在Rails 3.2.2上。
謝謝!
感謝您的澄清。從日誌中,我可以看到傳遞給我的數據庫的查詢,但我不確定Rails如何將「包含」與「連接」對待。 '索引'的答案也非常有幫助! – JohnnyCoder 2012-01-27 19:46:21