我在rails app上创建了一个简单的ruby。它有一个控制器名称ControllerB,它有4个视图,即索引,显示,编辑和新视图。
views文件夹中的show.html.erb包含html代码:
<p>Show post</p>
edit.html.erb包含:
<p>Edit post</p>
这是我的路线档案:
Rails.application.routes.draw do
get 'controller_a/myindex'
resources :post_controller
resources :controller_b
root 'controller_a#myindex'
end
问题是,当我尝试使用网址http://localhost:3000/controller_b/edit打开修改视图时 它显示了显示视图的内容,即显示帖子。
但是当我从routes.rb中删除行资源:controller_b并使用get命令导入每个视图时,它工作正常。这里出了什么问题?我还重新启动了rails webrick服务器,以确保已加载新配置。
这是我的controller_b_controller.rb文件:
class ControllerBController < ApplicationController
def index
end
def edit
end
def new
end
def show
end
end
根据Prashanth的要求,这是我的佣金路线输出。
Prefix Verb URI Pattern
Controller#Action
controller_b_index GET /controller_b/index(.:format)
controller_b#index
controller_a_myindex GET /controller_a/myindex(.:format)
controller_a#myindex
post_controller_index GET /post_controller(.:format)
post_controller#index
POST /post_controller(.:format)
post_controller#create
new_post_controller GET /post_controller/new(.:format)
post_controller#new
edit_post_controller GET /post_controller/:id/edit(.:format)
post_controller#edit
post_controller GET /post_controller/:id(.:format) post_controller#show
PATCH /post_controller/:id(.:format) post_controller#update
PUT /post_controller/:id(.:format) post_controller#update
DELETE /post_controller/:id(.:format) post_controller#destroy
GET /controller_b(.:format) controller_b#index
POST /controller_b(.:format) controller_b#create
new_controller_b GET /controller_b/new(.:format) controller_b#new
edit_controller_b GET /controller_b/:id/edit(.:format) controller_b#edit
controller_b GET /controller_b/:id(.:format) controller_b#show
PATCH /controller_b/:id(.:format) controller_b#update
PUT /controller_b/:id(.:format) controller_b#update
DELETE /controller_b/:id(.:format) controller_b#destroy
root GET / controller_a#myindex
答案 0 :(得分:4)
您的edit
网址应如下所示:
http://localhost:3000/controller_b/:id/edit
答案 1 :(得分:1)
您之所以看到同样的事情是因为show
路径需要具有此格式的网址:
controller_b GET /controller_b/:id
因此,当您转到/controller_b/show
或/controller_b/edit
时,它会认为:id
分别为show
和edit
。
如果您需要单一资源路线,则必须将路线定义更改为:
resource :controller_b
将允许您访问此路线:
controller_b GET /controller_b
不需要show
,实际上我认为如果您指定edit
或new
以外的任何内容,它可能会失败。