Использование Devise, Rails 5.0.6, Sqlite 3, Простая форма, Active Record 5.0.
Перепрыгивание между двумя проблемами с параметрами, так как поиск много похожих проблем / решений в Stack Overflow.В обоих случаях единственными параметрами, которые отображаются как передаваемые в ошибках Ruby или журналах сервера, является {id => "n"} (где n - правильный номер любого продукта) вместо полного списка параметров.
Я чувствую, что есть проблема или с тем, как я настроил Devise, или с тем, как я настроил Простую форму ... но не уверен.Пожалуйста, помогите !!!
Краткое сравнение:
Проблема № 1: Параметр отсутствует, не отображается продукт # Редактировать
- Это происходиткогда мне нужны параметры в моем методе product_parameters.
- Ruby не может выполнить рендеринг и извлекает ActionController :: ParameterMissing в ProductsController # ошибка редактирования.
- Параметры запроса: {"id" => "2"}
Проблема № 2: Редактировать форму, но запись о товаре не обновляется
- Нет ошибок, флэш-сообщение подтверждает успех и повторное представление. Шоу продукта
Обновление атрибутов
Журнал сервера Rails сообщает:
Недопустимые параметры: utf8, _method, authenticity_token, product, параметры продукта фиксации: "2"} разрешено: true> Перенаправлено на http://localhost:3000/products/2 Завершено 302 Найдено за 8 мс (ActiveRecord: 0,4 мс)
Вот мой код:
Модель продукта:
class Product < ApplicationRecord
belongs_to :category
has_many :product_specs
has_many :specifications, through: :product_specs
end
Контроллер продукта
class ProductsController < ApplicationController
before_action :set_category, only: [:new, :create]
before_action :set_product, only: [:edit, :show, :update, :destroy]
def index
@products = Product.all
@categories = Category.all
@message = Message.new
@message.build_company
end
def new
@product = Product.new
@categories = Category.all
@message = Message.new
@message.build_company
@specification = Specification.new
end
def create
@message = Message.new
@message.build_company
@categories = Category.all
@product = Product.new(product_parameters)
@product.category_id = product_parameters[:category_id]
if @product.save!
redirect_to product_path(@product)
else
render "new"
puts "fail"
end
end
def show
@categories = Category.all
@message = Message.new
@message.build_company
end
def edit
@message = Message.new
@message.build_company
@categories = Category.all
@product.update(product_parameters)
end
def update
if @product.update(product_parameters)
# @product.update(product_parameters)
flash[:success] = "You have updated the #{@product.name} product"
puts "SUPPOSEDLY UPDATING"
print "product parameters: #{product_parameters.inspect}"
redirect_to product_path(@product)
else
puts "SUPPOSEDLY NOT UPDATING"
flash.now[:error] = "You have not updated #{@product.name}"
render :edit
end
end
private
def build_company
@message.build_company
end
def set_product
@product = Product.find(params[:id])
end
def product_parameters
# Problem 1 => Keep 'require' : Edit Form Fails to Render, ActionController::ParameterMissing in ProductsController#edit
# params.require(:product).permit(:id, :name, :description, :picture, :product_spec_id)
# Problem 2 => Delete 'require': Edit Form renders, but fails to update Product record
params.permit(:id, :name, :description, :picture, :product_spec_id)
end
end
Маршруты
Rails.application.routes.draw do
devise_for :users
root to: 'pages#index', as: :home
get 'contact', to: 'messages#new', as: :contact
get 'about', to: 'pages#about', as: :about
get 'exa', to: 'pages#exa', as: :exa
get 'services', to: 'pages#services', as: :services
get 'messages', to: 'messages#show', as: :contactconfirm
resources 'products'
resources 'categories'
resources 'posts'
resources 'messages' do
resources :companies, only: [:new, :create, :show, :edit, :update]
resources :industries, only: [:index, :show]
end
end
Продукты / Edit.html.erb
<%= simple_form_for(@product) do |product| %>
<h4 class="product_name">
<%= product.input :name, placeholder: "Product Name" %>
</h4>
<div class="product_picture">
<%= image_tag("products/IPC_tablet.png") %>
</div>
<div class="product_description">
<strong>Description</strong>
<p class="font-size-12">
<%= product.input :description, label: false %>
</p>
<%= product.association :category, prompt: "Select Category" %>
</div>
<div class="product_admin_actions">
<div>Add A Specification</div>
</div>
<%= product.button :submit, "Save This Product" %>
<% end %>