изображения rails simple_forms и active_storage приводят к ошибкам контроллера при редактировании продуктов

#ruby-on-rails #ruby #rails-activestorage #simple-form-for

Вопрос:

Я создаю небольшое приложение marketplace с использованием rails и в настоящее время застрял в попытках заставить мой продукт редактировать и создавать страницы для работы. Я добавил возможность загрузки изображений и использовал простые формы для добавления сведений о продуктах, но каждый раз, когда я пытаюсь продолжить редактирование, я получаю следующую ошибку:

 The action 'update' could not be found for ProductsController
 

Между тем, если я попытаюсь создать новый продукт, я получу другую ошибку:

{"seller":["must exist"]}

Пожалуйста, посмотрите мой код ниже:

-products_controller.rb

   def create
    @product = Product.create 
    @product_id = @product.id 
      if @product.save
        render :show, status: :created
      else
        render json: @product.errors, status: :unprocessable_entity
      end

    end
  end


  # PATCH/PUT /products/1 or /products/1.json
  def update 
    @product = Product.update (product_params)
      if @product.save
        render products:id, status: :created
      else
        render json: @product.errors, status: :unprocessable_entity
      end
    end

 def product_params
      params.require(:product).permit(:title, :description, :price, :buyer_id, :seller_id, :category, :image_url)
    end
 
  • редактировать.html.erb
 <%= simple_form_for edit_product_path, url: {action: "update"} do |f| %>
    <h1 class="heading">Edit Product</h1>
    <%= render 'form', product: @product %>
<% end %>
 

-форма.html.erb

 <div class="form-inputs">
    <%= f.input :title %>
    <%= f.input :description %>
    <%= f.input :price %>
    <%= f.input :category, collection: ["footwear", "accessories", "menswear", "womenswear"] %>
    <div class="form-group">
      <% if product.picture.attached? %>
        <%= image_tag product.picture, style: "width: 200px; display: block" %>
      <% end %>
      <%= f.file_field :picture %>
    </div>
  </div>
 

Я очень признателен за любую помощь, которую я могу получить.

Ответ №1:

     @product = Product.create 
    @product_id = @product.id 
      if @product.save
        render :show, status: :created
      else
        render json: @product.errors, status: :unprocessable_entity
      end

    end <--- extra end
  end
 

Похоже, у вас есть дополнительный висячий конец в середине действия создания. Это, вероятно, объяснило бы, что с ним происходит.

Если это не устранит проблему, убедитесь, что у вас определены правильные маршруты routes.rb .

Если вы продолжаете получать seller must exist ошибку, Rails 5/6 автоматически предполагает, что belongs_to при сохранении записи у ассоциации будет присутствовать модель, с которой можно связать. Вы можете отключить это, добавив optional: true к своему определению отношений следующее:

 class Product
   belongs_to :seller, optional: true
end
 

Вы можете включить a seller_id в свою форму SimpleForm при загрузке страницы и связать его с ней, если вы добавите соответствующий фильтр product_params . Это может выглядеть примерно так:

<%= f.input :seller_id, :input_html => { :value => @seller.id } %>