Ruby on Rails - 如何将图像上传器添加到simple_form Gem



我正在创建一个基本的房屋列表页面来掌握Rails,我正在尝试研究如何将图像文件上传器添加到Ruby on Rails上的simple_form宝石中。

目前,我

有一个基本表格,要求提供标题、价格和描述,当我创建表格时,我为图像添加了一个输入字段,但我想允许用户添加一个图像文件,该文件将与house.image一起添加到列表中

我的代码如下:

索引.html.erb -

<p><%= link_to "Add a House", new_house_path %></p>
<% @houses.each do |house| %>
  <div class="house">
    <p><%= house.image %></p>
    <h2><%= house.title %></h2>
    <h2><%= house.price %></h2>
    <p><%= house.description %></p>
  </div>
<% end %>
<p><%= paginate @houses %></p>

房子.rb -

class House < ActiveRecord::Base
    validates :title, presence: true
    validates :price, presence: true
    validates :description, presence: true
    validates :image, presence: true
end

houses_controller.rb -

class HousesController < ApplicationController
  def index
    @houses = House.page(params[:page]).per(20).order(created_at: :desc)
  end
  def new
    @house = House.new
  end
  def create
    @house = House.new(params.require(:house).permit(:title, :price, :description, :image))
  if @house.save
    redirect_to root_path
  else
    render "new"
  end
  end
end

新.html.erb -

<%= simple_form_for @house do |form| %>
 <%= form.input :title, label: "House title" %>
 <%= form.input :price, label: "House price" %>
 <%= form.input :description, label: "Describe your house" %>
 <%= form.input :image, label: "Image of house" %>
 <%= form.button :submit %>
<% end %>

您应该能够更改:

<%= form.input :image, label: "Image of house" %>

<%= form.input :image, as: :file, label: "Image of house" %>

这将创建一个标准的 HTML 文件输入字段,允许您的用户选择要上传的本地文件。有关于此字段类型和其他可用简单表单输入字段类型的信息。

此外,您需要考虑使用诸如回形针或Carrierwave之类的Gem来处理服务器上(在模型中)上的接收文件。

如果你真的想要simple_form中的自定义输入类型,你可以在"自定义输入"下的simple_form github存储库中阅读如何实现它 - 这对于上传图像不是必需的。这将是您的代码的语法糖。

对于图像上传,您可以使用回形针

1:https://github.com/thoughtbot/paperclip 或蜻蜓

最新更新