Я создаю простой магазин, у меня одна таблица товаров. Я хочу, чтобы любой, кто заходил в магазин по адресу «сайт / продукты», мог только «показывать» продукты. но на URL 'website / admins / products' я хочу создавать, редактировать, уничтожать.
У меня есть два контроллера с одинаковым именем 'product_controller'. один находится в 'controller / admin', другой - просто в 'controller'.
у контроллера администратора есть полный CRUD, в то время как у другого контроллера только показ.
Моя проблема в том, что я всегда перенаправлен на один и тот же контроллер («website / admins / products» отправляет меня на «controller / product_controller»)
Я не уверен, что проблема в моем файле маршрута или в моей форме (или что-то еще?)
Это моя форма, которая идентична для обоих
<%= form_with( model: product, local: true) do |form| %>
<% if product.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(product.errors.count, "error") %> prohibited this product from being saved:</h2>
<ul>
<% product.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :title %>
<%= form.text_field :title %>
</div>
<div class="field">
<%= form.label :description %>
<%= form.text_area :description %>
</div>
<div class="field">
<%= form.label :price %>
<%= form.text_field :price %>
</div>
<div class="field">
<%= form.label :inventory_count %>
<%= form.number_field :inventory_count %>
</div>
<div class="admin/actions">
<%= form.submit %>
</div>
А это мой маршрутный файл
Rails.application.routes.draw do
namespace :admin do
resources :products
end
resources :products
end
Добавлено:
Контроллеры / products_controller
class ProductsController < ApplicationController
before_action :set_product, only: [:show, :edit, :update, :destroy]
def index
@products = Product.all
end
def show
end
def update
respond_to do |format|
if @product.ipdate(product_params)
format.html {redirect_to @product, notice: 'product was successfully updated.' }
else
format.json {render :edit }
format.json {render json: @product.errors, status: :unprocessable_entity }
end
end
end
private
def set_product
@product = Product.find(params[:id])
end
def product_params
params.require(:product).permit(:title, :description, :price, :inventory_count)
end
end
Контроллеры / админ / products_controller
class Admin::ProductsController < ApplicationController
before_action :set_product, only: [:show, :edit, :update, :destroy]
def index
@products = Product.all
end
def show
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.ipdate(product_params)
format.html {redirect_to @product, notice: 'product was successfully updated.' }
else
format.json {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(:title, :description, :price, :inventory_count)
end
end
Обновление: просмотр index.html.erb
24 <p id="notice"><%= notice %></p> 23 22 <h1>Products</h1> 21 20 <table> 19 <thead> 18 <tr> 17 <th>Title</th> 16 <th>Description</th> 15 <th>Price</th> 14 <th>Inventory count</th> 13 <th colspan="3"></th> 12 </tr> 11 </thead> 10 9 <tbody> 8 <% @products.each do |product| %> 7 <tr> 6 <td><%= product.title %></td> 5 <td><%= product.description %></td> 4 <td><%= product.price %></td> 3 <td><%= product.inventory_count %></td> 2 <td><%= link_to 'Show', product %></td> 1 <td><%= link_to 'Edit', edit_admin_product_path(product) %></td> 25 <td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td> 1 </tr> 2 <% end %> 3 </tbody> 4 </table> 5 6 <br> 7 8 <%= link_to 'New Product', new_admin_product_path %>
Если у вас есть какие-либо мысли или предложения, я был бы очень признателен, спасибо!