Let's create 2 models that are related to each other...
parent model : Product with name attribute.
child model: Imaged with URL attribute.
rails g model Image url:string
rails g scaffold Product name:string references Image
Next set-up MySQL database from this link:
https://www.ionos.com/digitalguide/server/know-how/use-mysql-with-ruby-on-rails/
after setting up the db...
user the product controller to update both the 2 models.
like this:
class ProductsController < ApplicationController
before_action :set_product, only: %i[ show edit update destroy ]
# GET /products or /products.json
def index
@products = Product.all
end
# GET /products/1 or /products/1.json
def show
end
# GET /products/new
def new
@product = Product.new
@image=@product.build_image
end
# GET /products/1/edit
def edit
end
# POST /products or /products.json
def create
@product = Product.new(product_params)
puts(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, status: :unprocessable_entity }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /products/1 or /products/1.json
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, status: :unprocessable_entity }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
# DELETE /products/1 or /products/1.json
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
# Use callbacks to share common setup or constraints between actions.
def set_product
@product = Product.find(params[:id])
end
# Only allow a list of trusted parameters through.
def product_params
params.require(:product).permit(:name,
image_attributes:[:url, :alt]
)
end
end
Top comments (0)