Я хотел добавить фотографии в модель. У меня есть пользователи с Devise и они have_many
Элементы, которые они продают.Ruby on Rails - Загрузка изображения
Теперь я хотел бы добавить массив изображений к модели Item (не уверен, что это лучший подход).
Я смотрел скрепку, но могу сделать только одно изображение. Также посмотрел на несущую волну, но не уверен, как реализовать существующую модель.
Вот некоторые из моих кодов.
item.rb
class Item < ActiveRecord::Base
belongs_to :user
validates :title, presence: true
validates :price, presence: true
validates :description, presence: true
end
items_controller.rb
class ItemsController < ApplicationController
before_action :findItem, only: [:edit, :update, :sold]
def index
@items = Item.all
end
def new
@item = Item.new
end
def create
@item = Item.create(item_params)
@item.user = current_user
if @item.save
flash[:success] = "Your item was successfully listed."
render 'show'
else
flash[:error] = "Your item could not be listed. Please try again."
render 'new'
end
end
def show
@item = Item.find(params[:id])
end
def edit
end
def update
if @item.update(item_params)
flash[:success] = "Your item listing was updated successfully."
redirect_to item_path(@item)
else
flash[:error] = "Your listing was not updated. Please try again."
render 'edit'
end
end
def sold
@item.toggle(:sold)
@item.save
redirect_to item_path(@item)
end
private
def item_params
params.require(:item).permit(:title, :price, :description)
end
def findItem
@item = Item.find(params[:id])
end
end
Форма для п/new.html.erb
<div class="row">
<div class="col-xs-12">
<%= form_for(@item, :html => {class: "form-horizontal", role: "form"}) do |f| %>
<div class="form-group">
<div class="control-label col-sm-2">
<%= f.label :title %>
</div>
<div class="col-sm-8">
<%= f.text_field :title, class: "form-control", placeholder: "What are you selling?", autofocus: true %>
</div>
</div>
<div class="form-group">
<div class="control-label col-sm-2">
<%= f.label :price %>
</div>
<div class="col-sm-8">
<%= f.number_field :price, class: "form-control" %>
</div>
</div>
<div class="form-group">
<div class="control-label col-sm-2">
<%= f.label :description %>
</div>
<div class="col-sm-8">
<%= f.text_area :description, rows: 10, class: "form-control", placeholder: "Describe your item. The more detail you include, the more likely it is to sell." %>
</div>
</div>
<div class="form-group">
<div class="center col-sm-offset-1 col-sm-10">
<%= f.submit class: "btn btn-primary btn-lg" %>
</div>
</div>
<% end %>
<div class="center col-xs-4 col-xs-offset-4">
<%= link_to "[ Cancel and return to listing page ]", items_path %>
</div>
Вот именно то, что мне нужно. Я буду реализовывать его завтра и посмотреть, как это происходит. Для представлений они будут доступны с помощью «@ item.images.each», а затем итерации? –
Если вы хотите * показать * загруженные изображения, вам нужно будет использовать '@item.images.each do | image | <% = image_tag image.picture.url%> end' - Я мог бы посмотреть, как вы делегируете метод 'picture.url' вашим изображениям, но поскольку это' has_many', это было бы довольно сложно –