Ruby on rails,控制器中的两个视图显示相同的输出但具有不同的html代码

时间:2015-07-06 17:01:37

标签: ruby-on-rails ruby

我在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

2 个答案:

答案 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分别为showedit

如果您需要单一资源路线,则必须将路线定义更改为:

resource :controller_b

将允许您访问此路线:

controller_b GET    /controller_b

不需要show,实际上我认为如果您指定editnew以外的任何内容,它可能会失败。