我正在创建一个基本的房源列表页面以掌握Rails,我正在尝试研究如何将图像文件上传器添加到Ruby on Rails上的simple_form gem中。
目前,我有一个要求标题,价格和描述的基本表单,而我在创建表单时为图像添加了一个输入字段,而不是输入字段,我想允许用户添加一个将使用house.image
添加到列表中的图像文件我的代码如下:
index.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>
house.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
new.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 %>
答案 0 :(得分:2)
您应该可以更改:
<%= form.input :image, label: "Image of house" %>
到
<%= form.input :image, as: :file, label: "Image of house" %>
这将创建一个标准的HTML文件输入字段,允许您的用户选择本地文件进行上传。有关此信息和其他字段类型的信息Simple Form input field types。
此外,您还需要考虑使用诸如Paperclip或Carrierwave之类的gem来处理服务器上的接收文件(在模型中)。
如果你真的想在simple_form中使用自定义输入类型,你可以阅读如何在“自定义输入”下的simple_form github repo中实现它 - 这对于上传图像不是必需的。这将是你的代码的语法糖。
答案 1 :(得分:0)
对于图片上传,您可以使用paperclip