#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 } %>