繁体   English   中英

从现有模型随机生成项目

[英]Random Generation of Items from Existing Model

我是 RoR 的新手,并试图让一个基本的应用程序工作 - 我有一个“书籍”模型和一个“流派”模型。 我希望创建一个页面,随机生成不同类型的书籍供用户选择。

我创建了一个“random_book”控制器,但不确定如何进行随机选择和显示。

任何帮助/指针将不胜感激。

编辑:

这是我在 random_book 模型中所做的工作:

" 加载 'user.rb'

class random_book < ActiveRecord::Base

 belongs_to :book
 belongs_to :genre


def get_random_book
    find(:all).sample(5)
end

谢谢你。

基于讨论

4款

  1. 类型
  2. 用户手册
  3. 用户

它们看起来像这样:

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 这样的代码描述性内容对 url 不太友好。

有4件事要做

  1. 创建一个新路由来获取用户选择的genre_ids列表。
  2. 创建一个与您创建的路线相关的操作,该路线呈现嘘声列表并将这些书籍添加到用户列表中
  3. 在视图中创建一个表单(任何视图,如现有书籍视图中的侧边栏,都无关紧要)此表单将发布您刚刚创建的路线和操作
  4. 创建一个视图来呈现图书列表(简单/ DRY 的方法是在现有的图书索引中添加一些元素,让用户知道它是根据他们的类型图片随机生成的图书列表)

添加路线

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

然后创建一个表单,向books_controller的索引操作发出post请求——您可以解析表单并更新该操作中的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)}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM