【发布时间】:2016-06-23 20:30:07
【问题描述】:
问题:
为什么路由仍在寻找properties/create 以及如何使它路由到admin_panels/properties#create?
说明:
我正在从头开始创建自己的管理面板。创建管理面板的主要原因是让用户可以轻松地为property 模型执行new、edit、update、create 和destroy 操作。所以,我为admin panel 创建了一个新的PropertiesController 来覆盖现有的。
我对此的期望是在user 创建一个新的property 之后,它将使用admin_panels/properties#create 创建属性。但是,我得到的是它试图找到一条不正确的到properties/create 的路线。
新AdminPanels::PropertiesController
class AdminPanels::PropertiesController < PropertiesController
before_action :set_property, only: [:show, :edit, :update, :destroy]
def index
@properties = Property.all
end
def show
end
def new
@property = Property.new
end
def edit
end
def create
@property = Property.new(property_params)
respond_to do |format|
if @property.save
format.html { redirect_to ADMIN_PANEL_PROPERTY_SHOW }
else
format.html { render ADMIN_PANEL_PROPERTY_NEW }
end
end
end
def update
respond_to do |format|
if @property.update(property_params)
format.html { redirect_to ADMIN_PANEL_PROPERTY_SHOW }
else
format.html { render ADMIN_PANEL_PROPERTY_EDIT }
end
end
end
def destroy
@property.destroy
respond_to do |format|
format.html { redirect_to ADMIN_PANEL_PROPERTY_INDEX }
end
end
private
def set_property
@property = Property.find(params[:id])
end
def property_params
params.require(:property).permit(:name, :description, :address)
end
end
覆盖现有的PropertiesController
class PropertiesController < ApplicationController
before_action :set_property, only: [:show]
def index
@properties = Property.all
end
def show
end
private
def set_property
@property = Property.find(params[:id])
end
def property_params
params.require(:property).permit(:name, :description, :address)
end
end
routes.rb
resources :users
resources :properties, only: [:index, :show]
namespace :admin_panels do
resources :properties
end
更新:
视图 > admin_panels > 创建 > _form.html.slim
= simple_form_for(@property) do |f|
= f.error_notification
.form-inputs
= f.input :name
= f.input :description
= f.input :address
.form-actions
= f.button :submit
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 controller routes