Я новичок в ruby на рельсах. Я хочу создать Бренд - Список товаров. Я хотел бы добавить названия продуктов и брендов (должны быть выбраны в раскрывающемся списке) на независимой странице. Каждый продукт имеет название и идентификатор бренда. Я установлю название бренда, которое выбрано из выпадающего списка, в переменную. после этого я добавлю название продукта, которое пользователь написал на независимой странице, и идентификатор бренда в таблицу продуктов.
rout.rb
Rails.application.routes.draw do
get 'welcome/index'
get 'add_product/index'
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
resources :brands do
resources :products
end
root 'welcome#index'
end
.._ create_brands.rb
class CreateBrands < ActiveRecord::Migration[6.0]
def change
create_table :brands do |t|
t.string :title
t.timestamps
end
end
end
.._ create_products.rb
class CreateProducts < ActiveRecord::Migration[6.0]
def change
create_table :products do |t|
t.string :name
t.references :brand, null: false, foreign_key: true
t.timestamps
end
end
end
brand.rb
class Brand < ApplicationRecord
has_many :products, dependent: :destroy
validates :title, presence: true,
length: { minimum: 2 }
end
product.rb
class Product < ApplicationRecord
belongs_to :brand
end
add_product / index. html .erb (add_product имеет представление и контроллер)
<h1>Add a new product</h1>
<%= form_with(model: @product) do |f| %>
<p>
<%= f.label :name,"Product name: " %><br>
<%= f.text_field :name %>
</p>
<%= f.collection_select(:brand_id, Brand.all, :id, :title) %>
<p>
<%= f.submit "Add a product" %>
</p>
<% end %>
add_product_controller.rb
class AddProductController < ApplicationController
def index
end
def new
@product = Product.new
end
def create
@product = Product.new(product_params)
if @product.save
redirect_to @product
else
render :new
end
end
private
def product_params
params.require(:product).permit(:name,:brand_id)
end
end
при запуске маршрутов в консоли,
Prefix Verb URI Pattern Controller#Action
welcome_index GET /welcome/index(.:format) welcome#index
add_product_index GET /add_product/index(.:format) add_product#index
brand_products GET /brands/:brand_id/products(.:format) products#index
POST /brands/:brand_id/products(.:format) products#create
new_brand_product GET /brands/:brand_id/products/new(.:format) products#new
edit_brand_product GET /brands/:brand_id/products/:id/edit(.:format) products#edit
brand_product GET /brands/:brand_id/products/:id(.:format) products#show
PATCH /brands/:brand_id/products/:id(.:format) products#update
PUT /brands/:brand_id/products/:id(.:format) products#update
DELETE /brands/:brand_id/products/:id(.:format) products#destroy
brands GET /brands(.:format) brands#index
POST /brands(.:format) brands#create
new_brand GET /brands/new(.:format) brands#new
edit_brand GET /brands/:id/edit(.:format) brands#edit
brand GET /brands/:id(.:format) brands#show
PATCH /brands/:id(.:format) brands#update
PUT /brands/:id(.:format) brands#update
DELETE /brands/:id(.:format) brands#destroy
root GET / welcome#index
независимое изображение страницы
если я go перешел на brans и нажал на шоу, я могу добавить товар только с именем. но я хочу добавить товар с независимой страницы. так как я могу это сделать? Могу ли я установить значение brand_id из выпадающего списка? чем я могу сохранить название продукта и идентификатор бренда?