недопустимая ошибка подписи для рельсов отправки редактирования продукта и новой формы продукта

#ruby-on-rails #ruby

Вопрос:

Привет, в настоящее время я работаю над приложением веб-маркетплейса для задания, которое позволяет пользователям загружать товары для продажи с прикрепленными изображениями и редактировать эти списки.

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

     ActiveSupport::MessageVerifier::InvalidSignature in ProductsController#create
 

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

        def create
    @product = Product.new(product_params)
    @product.user_id = current_user.id
    respond_to do |format|
      if @product.save
        format.html { redirect_to @product, notice: "Product was successfully created." }
        format.json { render :show, status: :created, location: @product }
      else
        format.html { render :new, status: :unprocessable_entity }
        format.json { render json: @product.errors, status: :unprocessable_entity }
      end
    end
  end
 

Мой файл product.rb выглядит так:

     belongs_to :user, :optional => true
    has_one_attached :picture
end
 

Простые формы работают, но для справки html-форма выглядит так:

 <%= simple_form_for@product do |f| %>
    <h1 class="heading">Edit Product</h1>
    <%= render 'form', product: @product %>
<% end %>
 

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

Ответ №1:

При использовании respond_to do |format| метода необходимо указать фактические форматы, на которые должен реагировать код. Итак, ваш контроллер, вероятно, должен выглядеть примерно так:

 def create
  @product = Product.new(product_params)
  @product.user_id = current_user.id
  respond_to do |format|
    format.html do
      if @product.save
      ...
    end
  end
end
 

Но я бы также спросил: почему вы используете respond_to здесь, если вы ожидаете только обработки результата веб-формы? Это то, что вам, возможно, потребуется сделать в какой-то момент, но изначально это не требуется и усложняет задачу.

Если это не решит проблему, нам, вероятно, потребуется просмотреть вашу функцию strong-params ( product_params ), определение модели продукта и, по крайней мере, ваше представление. Например, вам, возможно, потребуется структурировать строку более подобным образом, потому что ваши параметры могут не точно соответствовать полям в вашей модели.

   @product = Product.new(id: product_params[:id], name: product_params[:name])
 

Rails добавляет специальный код аутентификации при создании формы, чтобы предотвратить рассылку спама или взлом вашей формы злоумышленниками. Если ваша страница будет изменена после создания кода, она устареет и будет отклонена, но я ожидал бы более конкретной ошибки, если бы это произошло. Скрестив пальцы!