Rails scafolding association has_many error: 1 ошибка запретила сохранение этого продукта - PullRequest
0 голосов
/ 13 января 2019

Я хочу, чтобы все продукты добавлялись в зависимости от бренда, У меня есть марка и товарные леса, Я создаю бренд, как это: рельсы создают леса и создать ассоциацию has_many продукта с лесами бренда: рельсы генерируют строительные леса Название продукта: строка бренда: ссылки

модель моего бренда

class Brand < ApplicationRecord
    has_many :products
end

модель продукта

class Product < ApplicationRecord
  belongs_to :brand
end

миграция бренда

class CreateBrands < ActiveRecord::Migration[5.2]
  def change
    create_table :brands do |t|
      t.string :brandname

      t.timestamps
    end
  end
end

миграция продукта

class CreateProducts < ActiveRecord::Migration[5.2]
  def change
    create_table :products do |t|
      t.string :productname
      t.references :brand

      t.timestamps
    end
  end
end

Фирменный контроллер

class CreateProducts < ActiveRecord::Migration[5.2]
  def change
    create_table :products do |t|
      t.string :productname
      t.references :brand

      t.timestamps
    end
  end
end

Контроллер продукта

class ProductsController < ApplicationController
  before_action :set_product, only: [:show, :edit, :update, :destroy]

  def index
    @products = Product.all
  end

  def new
    @product = Product.new
  end

  def create
    @product = Product.new(product_params)

    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 }
        format.json { render json: @product.errors, status: :unprocessable_entity }
      end
    end

  end

  def update
    respond_to do |format|
      if @product.update(product_params)
        format.html { redirect_to @product, notice: 'Product was successfully updated.' }
        format.json { render :show, status: :ok, location: @product }
      else
        format.html { render :edit }
        format.json { render json: @product.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @product.destroy
    respond_to do |format|
      format.html { redirect_to products_url, notice: 'Product was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private.
    def set_product
      @product = Product.find(params[:id])
    end

    def product_params
      params.require(:product).permit(:productname, :brand_id)
    end
end

Я успешно обработал марку, но я пробовал новый продукт в зависимости от марки. Я получаю сообщение об ошибке: 1 ошибка запретила сохранение этого продукта: Бренд должен существовать

Как это исправить, спасибо за предложения

1 Ответ

0 голосов
/ 13 января 2019

перед созданием продукта у вас должна быть торговая марка, при создании продукта вы должны указать, какой бренд будет связан с этим продуктом. и эта информация сохраняется через brand_id (см .: t.references: brand)

в вашем ProductsController.rb добавьте @brands

  class ProductsController < ApplicationController
    before_action :set_product, only: [:show, :edit, :update, :destroy]

    def new
      @product     = Product.new
      @brand_list  = Brand.all.map { |c| [ "#{c.brandname} ", c.id] }
    end

  end

в вашем файле просмотра, который создает поле добавления товара для выбора бренда ниже, образец

  <%= f.select :brand_id, @brand_list, { include_blank: false } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...