首页 > 解决方案 > ActionController::ParameterMissing(参数丢失或值为空)

问题描述

我的一种表格有问题。

<%= 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

还有我的相关日志:

在 2018-09-06 09:32:13 +0200 由 PhotosController#create 作为 HTML 参数处理 127.0.0.1 开始 POST "/listings/10/bikes/10/photos": {"utf8"=>"✓", "authenticity_token"=>"MV4dOYOFinOZsJjr+LlFRMIsDtQyPOxmlaV6PhEUZ1I+l5QS/bvwBRWc/EXLuw59F/B1Rgt6/5r79+bCiq3h6w==", "commit"=>"Enregistrer", "listing_id"=>"10", "bike_id"=>"10 "} 用户负载 (0.3ms) SELECT users.* FROM usersWHERE usersid= 3 订购方式usersidASC LIMIT 1 列表加载 (0.2ms) SELECT listings.* FROM listingsWHERE listingsid= 10 LIMIT 1 Bike Load (0.2ms) SELECT bikes.* FROM bikesWHERE bikesid

ActionController::ParameterMissing(参数丢失或值为空:照片):

应用程序/控制器/photos_controller.rb:36:inphoto_params' app/controllers/photos_controller.rb:15:in在救援/布局中创建'渲染/Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb 渲染/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.3ms) 渲染 /Users/virginie/.rvm/gems/ruby-2.3.4/gems/actionpack-5.0.7/lib/action_dispatch/middleware/templates/rescues/diagnostics.html。救援/布局中的 erb (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

标签: ruby-on-railsformsparameters

解决方案


推荐阅读