В моей новой форме продукта, когда вы создаете новый продукт, есть раскрывающийся список, чтобы выбрать его категорию. Но после успешного создания продукта категория НИКОГДА не сохраняется (и не включается в запрос SQL, который записывает другие поля в базу данных).
Но после создания продукта, если вы щелкнете по редактированию (который перенаправляет обратно на точно такую же новую форму продукта) и выберете категорию, она сохранится (как это должно было быть в первый раз).
Если что-то сломано, категория никогда не сохранится. Но он работает просто отлично во второй раз, который повторяет ту же форму, что и в первый раз. Так что я пробовал и ошибался во всем, что было задействовано (что я скоро вставлю), и ничего не помогло.
В журнал добавлена категория, как будто она собирается успешно писать.
Parameters: {"utf8"=>"✓", "authenticity_token"=>"F9GBmwERQ==", "product"=>{"name"=>"Massey", "price"=>"$1.79 or best offer", "brief"=>"", "description"=>"", "category_id"=>"1", "commit"=>"Create Product"}
INSERT INTO "products" ("name", "brief", "description", "created_at", "updated_at", "price") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING "id" [["name", "Massey"], ["brief", ""], ["description", ""], ["created_at", 2019-06-29 09:48:30 UTC], ["updated_at", 2019-06-29 09:48:30 UTC], ["price", "$1.79 or best offer"]]
Это в моем products_controller.rb
def new
@product = Product.new
@categories = Category.all.map{|c| [c.name, c.id ] }
end
def edit
@categories = Category.all.map{|c| [ c.name, c.id ] }
end
def create
@product = Product.new(product_params)
@product.category_id = params[:category_id] ***THIS LINE WAS THE KEY; I REMOVED IT, NOW IT WORKS***
respond_to do |format|
if @product.save
format.html { redirect_to @product, notice: 'Product was successfully created.' }
else
format.html { render :new }
end
end
end
def update
@product.category_id = params[:category_id]
respond_to do |format|
if @product.update(product_params)
format.html { redirect_to @product, notice: 'Product was successfully updated.' }
else
format.html { render :edit }
end
end
end
Это в моем _form.html.erb (в представлении продуктов)
<div class="form-group">
<%= f.label :category_id %>
<%= f.collection_select :category_id, Category.all, :id, :name, {prompt: "Choose one"}, {class: "btn btn-default dropdown-toggle"} %>
</div>
Category.rb модель
class Category < ApplicationRecord
has_many :products
end
product.rb модель
class Product < ApplicationRecord
extend FriendlyId
friendly_id :name, use: [:finders]
belongs_to :category
belongs_to :user
mount_uploader :image, ImageUploader
end
New.html.erb и edit.html.erb (в представлении продуктов) оба имеют это
<%= render 'form', product: @product %>
Таблицы выглядят так
create_table "categories", force: :cascade do |t|
t.string "name"
t.text "desc"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "products", force: :cascade do |t|
t.string "name"
t.text "brief"
t.text "description"
t.string "buylink"
t.string "verdict"
t.string "category_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
def product_params
params.require(:product).permit(:name, :brief, :price, :description, :category_id, :user_id, :term)
end
Каждый раз, когда я думаю, что нашел что-то, что выглядит неправильно, это правильно, потому что категория сохраняется в продукте при редактировании / обновлении.
Я бы ни с кем не тратил время, кроме того, что держу пари, что это что-то тривиальное и очевидное для кого-то с опытом. В любом случае, если вы сделали это далеко, спасибо, что посмотрели. Если вы знаете, где я запутался, ОГРОМНОЕ спасибо заранее!