首页 > 解决方案 > ActiveRecord 模型对象未保存

问题描述

我有一个使用 ActiveStorage 的产品模型has_one_attached。我试图在提交表单后保存对象,但它没有保存,日志只说回滚,没有有用的错误消息。

形式:

<%= form_with(model: @produce, local: true)  do |f| %>
<div class="form-group">
  <label for="">Select Category</label>
  <%= f.select(:category_id, [],{}, {:class => "browser-default custom-select"}) do %>
    <% Category.all.each do |category| %>
    <%= content_tag(:option, category.name, value: category.id ) %>
    <% end %>
  <% end %>
</div>
<div class="form-group">
   <%= f.text_field :name, class: "form-control", placeholder: "Name"%>
</div>
<div class="form-group">
  <%= f.label :prod_image, "Upload Product Image"%>
   <%= f.file_field :prod_image, class: "form-control-file"%>
</div>
<div class="form-group">
  <%= f.submit "Submit", class: "btn btn-primary" %>
</div>
<% end %>

控制器动作:

def create
    @produce = Produce.new(prod_params)
    bybug
    if @produce.save
      flash[:notice] = "Object successfully created"
      redirect_to produces_path
    else
      flash[:alert] = "Something went wrong"
      render 'new'
    end
  end


  private

  def prod_params
    params.require(:produce).permit([:name, :category_id, :prod_image])
  end

模型:

class Produce < ApplicationRecord
  belongs_to :category
  has_one_attached :prod_image
end

日志:

Started POST "/produces" for ::1 at 2020-05-14 01:55:47 -0500
Processing by ProducesController#create as HTML
  Parameters: {"authenticity_token"=>"/IKY+MD350d6xSn5vkx8ZdIX/iGCp3sOokHQwkJM+tGX326sUjLKsx9YuWI+ZqDRsqMV0g4V7JbR4ilOTJE/dw==", "produce"=>{"category_id"=>"2", "name"=>"Cabbage", "prod_image"=>#<ActionDispatch::Http::UploadedFile:0x0000000006b1bc68 @tempfile=#<Tempfile:C:/Users/DEVELO~1/AppData/Local/Temp/RackMultipart20200514-18284-1yh47qh.jpg>, @original_filename="cabbage.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"produce[prod_image]\"; filename=\"cabbage.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"Submit"}
   (0.4ms)  BEGIN
  ↳ app/controllers/produces_controller.rb:10:in `create'
  Category Load (0.6ms)  SELECT "categories".* FROM "categories" WHERE "categories"."id" = $1 LIMIT $2  [["id", 2], ["LIMIT", 1]]
  ↳ app/controllers/produces_controller.rb:10:in `create'
   (0.4ms)  ROLLBACK
  ↳ app/controllers/produces_controller.rb:10:in `create'
  Rendering produces/new.html.erb within layouts/application

我哪里错了?

标签: ruby-on-rails-6rails-activestorage

解决方案


推荐阅读