У меня проблема с одной из моих форм.
<%= form_for [@listing, @bike, @photo], html: { multipart: true } do |f| %>
<div class="custom-file col-sm-10 mt-4">
<%= f.file_field :attachment, class: "custom-file-input" %>
<label class="custom-file-label">Ajouter une photo</label>
</div>
<%= f.submit "Enregistrer", class: "btn btn-primary float-sm-right mt-4" %>
<% end %>
Когда я просматриваю новый файл и нажимаю на кнопку отправки, все работает нормально. Но когда я нажимаю кнопку «Отправить», не просматривая изображения, я получаю эту ошибку:
ActionController :: ParameterMissing (параметр отсутствует или значение пусто: фотография):
Форма помещена в мой index.html.erb. Есть мой контроллер методов:
class PhotosController < ApplicationController
before_action :authenticate_user!
before_action :find_listing, :find_bike
def index
@photos = @bike.photos
@photo = Photo.new
end
def create
@photo = Photo.new(photo_params)
if @photo.save
flash[:success] = "Photo ajoutée avec succès"
redirect_to listing_bike_photos_path(listing_id: @listing, bike_id: @listing.bike)
else
flash[:error] = @photo.errors.values
redirect_to listing_bike_photos_path(listing_id: @listing, bike_id: @listing.bike)
end
end
private
def photo_params
params.require(:photo).permit(:id, :attachment, :legend).merge(bike_id: @bike.id)
end
def find_listing
@listing = Listing.find(params[:listing_id])
end
def find_bike
@bike = Bike.find(params[:bike_id])
end
end
И вот, мои маршруты:
resources :listings, except: [:show, :edit] do
resources :bikes, except: [:edit] do
resources :photos
end
end
Полагаю, я сделал что-то не так. Но я не вижу, откуда возникла проблема. Может ли кто-нибудь помочь мне найти проблему? Заранее большое спасибо.
РЕДАКТИРОВАТЬ
Вот моя фотомодель:
class Photo < ApplicationRecord
belongs_to :bike, optional: true
has_attached_file :attachment, styles: { medium: "300x300#", thumb: "100x100>" }, default_url: "/images/:style/missing.png"
validates_attachment_content_type :attachment, content_type: /\Aimage\/.*\z/
validates :attachment, presence: true
end
И мои похожие журналы:
Начато POST "/ Listings / 10 / bikes / 10 / photos" для 127.0.0.1 в 2018-09-06 09:32:13 +0200
Обработка PhotosController # создать как HTML
Параметры: { "UTF-8" => "✓", "authenticity_token" => "MV4dOYOFinOZsJjr + LlFRMIsDtQyPOxmlaV6PhEUZ1I + l5QS / bvwBRWc / EXLuw59F / B1Rgt6 / 5r79 + bCiq3h6w ==", "совершить" => "Enregistrer", "listing_id" = > "10", "bike_id" => "10"}
Пользовательская нагрузка (0,3 мсек) SELECT users
. * ОТ users
ГДЕ users
. id
= 3 ЗАКАЗАТЬ ПО users
. id
ASC LIMIT 1
Загрузка списка (0,2 мс) SELECT listings
. * ОТ listings
ГДЕ listings
. id
= 10 ПРЕДЕЛ 1
Нагрузка на велосипед (0,2 мс) ВЫБРАТЬ bikes
. * ОТ bikes
ГДЕ bikes
. id
= 10 ПРЕДЕЛ 1
Выполнено 400 неверных запросов за 4 мс (ActiveRecord: 0,8 мс)
ActionController :: ParameterMissing (параметр отсутствует или значение пусто: фотография):
app / controllers / photos_controller.rb: 36: в photo_params'
app/controllers/photos_controller.rb:15:in
create '
Отрисовка /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb в рамках rescues / layout
Рендеринг /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
Оказано /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (4.5ms)
Рендеринг /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
Предоставлено /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.1ms)
Рендеринг /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
Предоставлено /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1,3 мс)
Предоставлено /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb в пределах rescues / layout (108.1ms)
А вот схема моей таблицы:
create_table "photos", force: :cascade, options: "ENGINE=InnoDB DEFAULT
CHARSET=utf8" do |t|
t.integer "bike_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "attachment_file_name"
t.string "attachment_content_type"
t.integer "attachment_file_size"
t.datetime "attachment_updated_at"
t.string "legend"
end