@book = Book.find(1) @reviews = Review.where(:book_id => @book.id)
@book = Book.find(1) @reviews = @book.reviews
class Review < ActiveRecord::Base belongs_to :book end
rails g scaffold review book:references user:references body:text
def belongs @review = Review.find(3) end
<h2>「<%= @review.book.title %>」のレビュー </h2> <hr/> <p><%= @review.body %>(<%= @review.updated_at %>)</p>
SELECT "reviews".* FROM "reviews" WHERE "reviews"."id" = ? LIMIT 1 [["id", 3]] SELECT "books".* FROM "books" WHERE "books"."id" = 2 LIMIT 1
class Book < ActiveRecord::Base has_many :reviews
def has_many @book = Book.where(:isbn => '978-4-7980-2812-5' ).first end
<h2>「<%= @book.title %>」のレビュー </h2> <hr/> <ul> <% @book.reviews.each do |review| %> <li><%= review.body %>(<%= review.updated_at %>)</li> <% end %> </ul>
SELECT "books".* FROM "books" WHERE "books"."isbn" = '978-4-7980-2812-5' LIMIT 1 SELECT "reviews".* FROM "reviews" WHERE "reviews"."book_id" = 1
class User < ActiveRecord::Base has_one :author
class Author < ActiveRecord::Base belongs_to :user
def has_one @user = User.where(:username => 'isatou').first end
<ul> <li>ユーザ名:<%= @user.username %></li> <li>メールアドレス:<%= @user.email %></li> <% unless @user.author.nil? %> <li>著者:<%= @user.author.name %></li> <li>誕生日:<%= @user.author.birth %></li> <% end %> </ul>
SELECT "users".* FROM "users" WHERE "users"."username" = 'isatou' LIMIT 1 SELECT "authors".* FROM "authors" WHERE "authors"."user_id" = 2 LIMIT 1
rails g model authors_books author:references book:references
class CreateAuthorsBooks < ActiveRecord::Migration def change create_table :authors_books , :id => false do |t| t.references :author t.references :book end add_index :authors_books, :author_id add_index :authors_books, :book_id end end
class Book < ActiveRecord::Base has_and_belongs_to_many :authors
class Author < ActiveRecord::Base has_and_belongs_to_many :books
def has_and_belongs @book = Book.where(:isbn => '978-4-7741-4466-5').first end
<h2>「<%= @book.title %>」の著者情報 </h2> <hr/> <ul> <% @book.authors.each do |author| %> <li><%= author.name %>(<%= author.birth %> | <%= author.address %> )</li> <% end %> </ul>
SELECT "books".* FROM "books" WHERE "books"."isbn" = '978-4-7741-4466-5' LIMIT 1 SELECT "authors".* FROM "authors" INNER JOIN "authors_books" ON "authors"."id" = "authors_books"."author_id" WHERE "authors_books"."book_id" = 2
books <---1:0..n---> reviews <---0..n:1---> users <-------------0..m:0..n------------->
class Book < ActiveRecord::Base has_many :reviews has_many :users, :through => :reviews
class Review < ActiveRecord::Base belongs_to :book belongs_to :user
class User < ActiveRecord::Base has_many :reviews has_many :books, :through => :reviews
def has_many_through @user = User.where(:username => 'isatou').first end
<ul> <li>ユーザ名:<%= @user.username %></li> <li>メールアドレス:<%= @user.email %></li> <% unless @user.books.empty? %> <li>レビューした本: <ul> <% @user.books.each do |book| %> <li><%= book.title %></li> <% end %> </ul> </li> <% end %> </ul>
SELECT "users".* FROM "users" WHERE "users"."username" = 'isatou' LIMIT 1 SELECT COUNT(*) FROM "books" INNER JOIN "reviews" ON "books"."id" = "reviews"."book_id" WHERE "reviews"."user_id" = 2 SELECT "books".* FROM "books" INNER JOIN "reviews" ON "books"."id" = "reviews"."book_id" WHERE "reviews"."user_id" = 2
@book.reviews<<@review | モデルを追加 |
@book.reviews.build(:body => '本') | モデルを生成(保存しない) |
@book.reviews.create(:body => '本') | モデルを生成(保存する) |
:autosave | 親モデルの保存/削除を行うか |
:dependent | モデル削除時に、関連先のモデルも削除するか |
:touch | モデル保存時に、create_at/update_atを更新するか |