こんにちは。最近、teratailにとてもお世話になっております。
現在、Ruby on railsで参考書のレビューサイトを開発しておりまして、その際に、関連付けをしているテーブルBooksとReviewsの二つから関連しているレコードを同時に取得したいのですが、良い方法が思いつきませんでしたので、ここで質問させていただきます。
現状、思いついたのは下のコードです。
Ruby
1//books_controller.rb 2@review = Review.new 3book_datas = Book.all 4@set_datas = Hash.new //本とレビュー情報を入れるハッシュ 5 6 book_datas.each do |b_data| 7 r_data = @review.class.where(book_id: b_data.id) //本と関連するレビューをReviewテーブルから取得 8 if r_data //もし本と関連するレビューが見つかったら 9 @set_datas = {:book => b_data, :review => r_data} //本のデータと、レビューのデータをハッシュに入れる 10 end 11 end
booksテーブル,reviewテーブルそれぞれの構造は以下の通りです。
CREATE TABLE books
(
id
int(11) NOT NULL AUTO_INCREMENT,
title
varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
price
int(11) DEFAULT NULL,
image_url
text COLLATE utf8_unicode_ci,
amazon_url
text COLLATE utf8_unicode_ci,
created_at
datetime NOT NULL,
updated_at
datetime NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE reviews
(
id
int(11) NOT NULL AUTO_INCREMENT,
user_id
bigint(20) DEFAULT NULL,
book_id
int(11) DEFAULT NULL,
content
text COLLATE utf8_unicode_ci,
created_at
datetime NOT NULL,
updated_at
datetime NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
##質問
思いつきでコントローラだけ書いてみましたが、このような場合、どのような取得の仕方をするのが最適なのでしょうか?
何か助言を頂けますとありがたいです。
長々となってしまい、すみませんが、宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/11 10:25
退会済みユーザー
2016/01/11 10:58
退会済みユーザー
2016/01/11 11:12 編集