Html 如何使用Rails从表单上传文件以显示到另一个视图?

Html 如何使用Rails从表单上传文件以显示到另一个视图?,html,ruby-on-rails,ruby,Html,Ruby On Rails,Ruby,新手到Rails来。因此,我正在为我的项目创建一个在线图书馆,在那里我可以上传用户选择的电子书(PDF格式)。表单addmanga包含两个文件:电子书的缩略图(jpg、jpeg、png)和实际的pdf 我想知道如何从表单中获取缩略图和pdf文件,并将其显示在我的show视图中 谢谢大家! 1) 我已经尝试将img标记引入label标记中,但是对于当前脚本,没有返回任何内容 <!DOCTYPE html> <html lang="en"> <head>

新手到Rails来。因此,我正在为我的项目创建一个在线图书馆,在那里我可以上传用户选择的电子书(PDF格式)。表单addmanga包含两个文件:电子书的缩略图(jpg、jpeg、png)和实际的pdf

我想知道如何从表单中获取缩略图和pdf文件,并将其显示在我的show视图中

谢谢大家!

1) 我已经尝试将img标记引入label标记中,但是对于当前脚本,没有返回任何内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <%= csrf_meta_tag %>
    <title>Document</title>
</head>
<body>

<div class="container">
  <div class="information">
    <h1>Title</h1>
    <p><%= @book.title%></p>
    <h1>Author</h1>
    <p><%= @book.author%></p>
    <h1>Description</h1>
    <p><%= @book.description%></p>
  </div>
</div>

<%= link_to "Edit", edit_book_path(@book), :class => "btn btn-default" %>
<!--after you make this make edit method in books controller-->
<%= button_to "Delete", book_path(@book),
    method: :delete,
    data: {confirm: 'Are you sure?'},
    :class => "btn btn-danger" %>

</body>
</html>

This is my books controller. 
class BooksController < ApplicationController
  skip_before_action :verify_authenticity_token

  def index  #step 4
    @books = Book.all
  end

  def show #step 3
    @book = Book.find(params[:id]) #get individual post page
  end

  def newBook 
    @book = Book.new
    #creates a new post of registered books 
  end

  def create #Step 2
    #render plain: params[:books].inspect #see what data is sent
    @book = Book.new(book_params)

    if(@book.save)
      redirect_to @book
    else
      render 'newBook' #if title is not there, just re renders newBook page
    end

  end

  def edit 
    @book = Book.find(params[:id]) #after this, make edit.html.erb
  end

  def update
    @book = Book.find(params[:id]) 

    if(@book.update(book_params))
      redirect_to @book
    else
      render 'edit'
    end
  end

  def destroy 
    @book = Book.find(params[:id])
    @book.destroy
    redirect_to books_path
  end

  def mangaList
    @books = Book.all
  end

  private 

  def book_params #can only be accessed from this class #step1 
    params.require(:books).permit(:title, :author, :description)
  end
end

文件
标题

作者

描述

“btn btn默认值”%> “btn btn危险”%> 这是我的图书管理员。 类BooksController

我尝试在书参数中添加:文件,但没有成功。

Rails提供了一种通过
ActiveStorage
上传文件的简单方法(也有一些gem可以做同样的事情,但现在你可以尝试
ActiveStorage
,因为它是内置解决方案)

官方指南是开始深入研究这个话题的好资源。您可以在这里找到
ActiveStorage
相关文章:

还有很多关于如何在互联网上设置它的教程。如果您更喜欢视频,guy GoRails提供了不错的概述:

基本上,您需要将一些配置添加到应用程序中,并将相关字段添加到模型中。在此之后,您将能够将参数中的文件传递给控制器,并将其表示形式保存在数据库中。这将允许您在视图中从实例变量中检索它们(就像您现在使用
title
author
description
所做的那样)


希望这有帮助!

文件是属性还是关联?
您试图上传的文件是图书还是其他关联模型?

谢谢您的帮助!问题已经解决!只需添加一个图像标记,愚蠢的我。但我看了教程,非常有用。没问题,很高兴我能提供帮助。这是一个属性,只需在我的视图中添加一个图像标记。谢谢您的帮助!好的,谢谢您可以使用CarrierWave gem很容易实现,请仔细阅读文档,如果您仍然需要帮助,可以ping。