(решено) Почему collection_select моей формы будет писать только в базу данных при обновлении, но не при первом заполнении формы (создание новой)? - PullRequest
0 голосов
/ 29 июня 2019

В моей новой форме продукта, когда вы создаете новый продукт, есть раскрывающийся список, чтобы выбрать его категорию. Но после успешного создания продукта категория НИКОГДА не сохраняется (и не включается в запрос 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

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

Я бы ни с кем не тратил время, кроме того, что держу пари, что это что-то тривиальное и очевидное для кого-то с опытом. В любом случае, если вы сделали это далеко, спасибо, что посмотрели. Если вы знаете, где я запутался, ОГРОМНОЕ спасибо заранее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...