2015-02-04 3 views
0

Я создаю страницу с базовым домом, чтобы справиться с Rails, и я пытаюсь выяснить, как добавить загрузчик файла изображения в жемчужина simple_form на Ruby on 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

см. Это может помочь [https://github.com/plataformatec/simple_form/wiki/Adding-custom-input-components – Sontya

ответ

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 для обработки файлов на сервере (в модели).

И если вам действительно нужен пользовательский тип ввода в simple_form, вы можете прочитать о том, как реализовать это в реестре github simple_form в разделе «Пользовательские входы» - это НЕ было бы необходимо для загрузки изображения. Это будет синтаксический сахар для вашего кода.

+0

Спасибо, я добавил form.input, и он работает, но пока не отображает изображение, я добавил самоцвет Paperclip на свой сайт, но я не уверен, как его реализовать. – user2498890

+0

Вы пытаетесь отобразить изображение в браузере/клиенте перед загрузкой? Если это так, наиболее распространенным способом обработки этого будет решение JavaScript (https://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded). В репозитории Paperclip Github есть хорошая документация и достойная вики для получения и обработки файлов на стороне сервера. –

Смежные вопросы