问题:
为什么路线仍然在寻找properties/create
以及如何让它路由到admin_panels/properties#create
?
阐释:
我正在从头开始创建自己的管理面板。创建管理面板的主要原因是允许用户轻松执行new
的{{1}},edit
,update
,create
和destroy
操作模型。因此,我为property
创建了一个新PropertiesController
来覆盖现有的admin panel
。
我对此的期望是在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
更新:
观点&gt; admin_panels&gt;创建&gt; _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
答案 0 :(得分:0)
目前,properties
和index
的路由为show
,admin_panels
下的路由包含properties
更改您的路由文件:
resources :users
namespace :admin_panels do
resources :properties, only: [:index, :show]
end
在终端中写下以下命令以查看路由。
rake routes
在终端中编写以下命令以查看admin_panels
rake routes | grep admin_panel
以表格形式指定操作和控制器:
<%= simple_form_for @course_group,
url: url_for(
action: 'create',
controller: 'admin_panels/properties'
),
method: :post do |f| %>
语法可能略有不同。
答案 1 :(得分:0)
您可以通过两种方式尝试,首先使用普通url
,也可以使用simple_form_for的url_for
帮助。
正常方式,
<%= simple_form_for @provider, :url => admin_panel_properties_create_path, :method => :post do |f|%>
使用助手
<%= simple_form_for @provider, url: url_for( action: 'create',controller: 'admin_panels/properties'), method: :post do |f| %>