我对RoR很新,并试图让一个基本的应用程序工作 - 我有一个'书籍'模型和'流派'模型。我希望创建一个页面,随机生成不同类型的书籍供用户选择。
我创建了一个'random_book'控制器,但不确定如何继续进行随机选择和显示。
任何帮助/指示都将不胜感激。
编辑:
以下是我在random_book模型中所做的工作:
“加载'user.rb'
class random_book<的ActiveRecord ::基
belongs_to :book
belongs_to :genre
def get_random_book
find(:all).sample(5)
end
“
谢谢。
答案 0 :(得分:0)
基于讨论
4个型号
它们看起来像这样:
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
列表。 添加路线
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 %>
- 我确定你能做的最后一个,它返回一个书籍对象列表,所以解析它最适合你。在控制器操作中,您可以通过在控制器操作中添加这些内容,自动将书籍的ID添加到UserBook模型中:
@books.each{ |book| book.user_books.create(user: user)}