На основе обсуждения
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.
Есть 4 вещи, чтобы сделать
- Создать новый маршрут, чтобы получить список
genre_ids
, который выбирает пользователь.
- Создайте действие, которое соотносится с созданным вами маршрутом, который отображает список boos и добавляет эти книги в список пользователей.
- Создайте форму в виде (любое представление, например, боковая панель в существующем представлении книг, doesn Не имеет значения, эта форма отправит маршрут и действие, которое вы только что сделали.
- Создайте представление, чтобы отобразить список книг (простой/суточный способ состоит в том, чтобы добавить несколько элементов в существующий индекс книг, чтобы пользователи знали его случайное генерируется список книг на основе их жанровых фотографии)
Добавить маршрут
post "/random-books", to: "books#random_books", as: :random_books
Создать действие в books_controler
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
Затем создать форму, которая делает post
запрос на указательном действия books_controller
- Вы можете разобрать форму и обновить модель 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 %>
- Последний один я уверен, что вы можете сделать, это возвращает список объектов книги так разобрать ее, однако лучше всего работает для вас. В действии контроллера вы можете автоматически добавить идентификаторы для книг в модель UserBook, добавив это в действии контроллера:
@books.each{ |book| book.user_books.create(user: user)}
Хотите ли вы случайно * генерировать * (он же создать) записи в базе данных для этого пользователя ? Или вы хотите случайно загрузить * существующие записи из базы данных? Если вы хотите создать, вам все равно, имеют ли смысл названия книг, имена авторов и жанры? – spickermann
Я хочу создавать/создавать записи - но они должны принадлежать к трем жанрам (художественная, художественная, поэтическая). имена не имеют значения - я собирался использовать список случайных слов – katebeckett
Является ли жанр собственной моделью? – trh