議論
に基づいて
4モデル
- ブック
- ジャンル
- UserBook
- ユーザー
彼らはこのようなものになります。
を
class User < ActiveRecord::Base
has_many :user_books
has_many :books, through: :user_books
end
class Genre < ActiveRecord::Base
has_many :books
def fetch_random_books(qty)
#you want to make sure you don't error out by requesting a sample of an empty list of books so check first. The qty argument lets you control the number of books for the search
unless self.books.empty?
self.books.limit(qty).sample
end
end
end
class Book < ActiveRecord::Base
belongs_to :genre
has_many :user_books
end
class UserBook < ActiveRecord::Base
belongs_to :book
end
ランダムな本のセクションでは、おそらく別のルートを使用します。なぜなら、user_bookのようなコードを記述するのはあまり親切ではないからです。
ユーザーが選択genre_ids
のリストを取得するために新しいルートを作成します
- を行うには4つのものがあります。
- boosのリストをレンダリングしてそれらの書籍をユーザーリストに追加するために作成したルートに関連するアクションを作成します。
- ビューを作成します(既存のブックビューのサイドバーのようなビュー、あなたが今作成したルートとアクションを投稿します。
- ブックリストを表示するためのビューを作成します(簡単/ DRY方法は、既存のブックのインデックスにいくつかの要素を追加して、そのジャンルの写真をもとに、書籍の生成リスト)
はルートを追加
post "/random-books", to: "books#random_books", as: :random_books
def random_books
if params[:genre_ids]
genres = Genre.where(id: params[:genre_ids])
@books = []
genres.each do |genre|
@books << genre.fetch_random_books(10)
end
else
@books = nil
end
respond_to do |format|
format.html { render action: :index }
end
end
が続いbooks_controller
のindexアクションへpost
要求を行い、フォーム作成books_controlerでアクションを作成 - あなたはフォームを解析し、そのアクション内部UserBookモデルを更新することができますをし、同時にすべての本のリストを表示する。
<%= form_tag(random_books_path, method: :post) do %>
<ul>
<% Genre.all.each do |genre| %>
<li>
<label class='genre-select'>
<%= check_box_tag 'genre_ids[]', genre.id -%>
<%= genre.name %>
</label>
</li>
<% end %>
</ul>
<%= submit_tag "Fetch Book List"%>
<% end %>
- 私はあなたが行うことができると確信してい最後の1、それはそう、それはしかし、あなたに最適な解析ブックオブジェクトのリストを返します。
@books.each{ |book| book.user_books.create(user: user)}
出典
2016-04-22 18:51:46
trh
はあなたがランダムに*そのユーザーのデータベース内のエントリ(別名作成)*を生成したいですか:コントローラのアクションでは、自動的にコントローラのアクション内でこれを追加することにより、UserBookモデルへの書籍のIDを追加することができます?または、データベースからランダムに*既存のエントリをロードしたいですか?あなたが作成したい場合は、書籍のタイトル、著者名、ジャンルが実際に意味を持つかどうか気にしますか? – spickermann
私はエントリを生成/作成したいですが、3つのジャンルのタイプ(フィクション、ノンフィクション、詩)に属している必要があります。名前は関係ありません - 私は無作為な単語のリストを使用するつもりだった – katebeckett
ジャンルはそれ自身のモデルですか? – trh