Tamam .. Rails'e yeni geldim ve bunun daha önce sorulmuş olduğunu biliyorum, ancak hala aşağıdaki ortak probleme nasıl yaklaşacağım konusunda kafam karışık. Dernek işe yarayabilirim, ama büyülü bir işe sahip olmak ve kötü alışkanlıklarla rayları başlatmak benim yapmak istediğim bir şey değildir.Rails Modeller Oluşturma, has_many ve belongs_to için
Blog yapıyorum diyorum. İki kaynağım var: Makaleler ve Kullanıcılar. Her kullanıcı çok sayıda makalesi bulunmaktadır ve her makalenin tek bir kullanıcıya ait:
rails g scaffold User name:string email:string
rails g scaffold Article user_id:integer title:string content:string
Kullanıcı Modeli:
class User < ActiveRecord::Base
has_many :articles
end
Madde Model:
class Article < ActiveRecord::Base
belongs_to :user
end
Şimdi benim makaleleri endeksi, yapabilirim gibi bir şey yapın:
…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>
Ve Kullanıcı Adı için bu model ilişkilendirmesi için gereken tek şey, response_to'dan önceki indeks eylemine "@ articles = Article.all" yazılmasıdır. Oldukça havalı!
Tüm bu makaleleri (sadeliği için sayfa sırasını burada görüntüleyemiyorum) Giriş sayfamdaki dizin eylemini kullanarak eklemek istiyorum?
class HomeController < ApplicationController
def index
@articles = Article.joins(:user)
end
end
... sonra benim ev-> indeks görünümünde bu verilere erişebilir:
Ben Ev Kontrolörü böyle bir şey yapabileceğini biliyorum
<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>
İlk Soru : Tüm Makaleler için Kullanıcı verilerine erişirken, şunu kullanmalıyım: birleşim veya bir: içerir? Her ikisi de işe yarayacak gibi görünüyor, ama bu durumda hangisinin doğru olduğunu ve hangisinin genellikle daha hızlı performans gösterdiğini merak ediyorum.
rakip olduğunu-
@articles = Article.includes(:user)
İkinci Soru
@articles = Article.joins(:user)
: tamsayı veya kullanıcıyı: Madde (göçünü bina) benim iskele, ben user_id kullanması gereken referansları. Aynı şeyi yapıyorlar mı yoksa diğerinin üzerinde mi tercih ediyorlar? Kullanırsam: alan türü olarak tamsayı, bunun için bir dizin eklemem önerilir (add_index: articles,: user_id)? Harika bir
RailsCast buldum ve açıklamak için harika bir iş çıkardı, ama başka birinin başka bir fikri olup olmadığını merak ediyorum.
Eğer yardımcı olursa, Rails 3.2.2'deyim.
Teşekkürler!
Açıklama için teşekkürler. Günlüklerden, DB'ime iletilen sorguyu görebiliyorum, ancak Rails'in 'katılma' ya da 'katılmalarına' nasıl davrandığından emin değildim. 'Index' cevabı da çok faydalı! – JohnnyCoder