0

我对 RoR 很陌生,我正在尝试建立一个非常基本的网站。我的主页工作正常,但是当我尝试添加新页面时,我在日志中不断收到“没有路线匹配”。这是 rake 路由的输出:

         Prefix Verb URI Pattern                Controller#Action
inventing_index GET /inventing/index(.:format) inventing#index
    ideas_index GET /ideas/index(.:format)     ideas#index
           root GET /                          ideas#index

但是,当我访问 mysite.com/inventing 或 mysite.com/inventing/index 时,我得到 no route matches 错误。mysite.com/ 按预期显示 app/views/ideas.erb。我所做的只是rails generate controller inventing index。我还需要做些什么来激活路线吗?

我在centos 6上运行ruby 2.0.0p247和rails 4.0.0 withpassenger/apache。我安装了所有ruby/rails/passenger的东西,所以它可能没有正确设置。

谢谢

编辑:这是我的 routes.db 文件:

Rortest::Application.routes.draw do
  get "inventing/index"
  get "ideas/index"
root to: 'ideas#index'
end
4

1 回答 1

0

tldr:您的问题可能是路线。更改get 'inventing/index'get 'inventing/index'=> 'inventings#index'正确地将路由指向您的控制器操作。


添加新页面/路由时,您需要做四件事。对于静态页面,我通常按以下顺序执行它们:

1)为每个页面创建一个具有适当操作的控制器

您已经使用 进行了此操作rails generate controller inventing index,但请确保:

  • 在您的app/controllers文件夹中,您确实有一个名为inventings_controller.rb
  • inventings_controller.rb中,你至少有这个:

class InventingsController < ApplicationController
def index
end
end

2)为每个控制器动作创建一个视图

确保:

  • 在您的app/views/inventings文件夹中,您有一个名为 index.html.erb 的文件
  • 在该文件中放入一些简单的 HTML,例如<h1>Testing123</h1>,以便您查看它是否正常工作。

3)为每个控制器动作添加一个路由

看起来这可能是问题所在。在你的routes.rb文件中,你需要这个:

get 'inventing/index' => 'inventings#index'

您的root to工作是因为它实际上直接指向您的控制器动作,但是 rails 不够聪明,无法猜测inventing/index应该转到控制器中的index动作inventing**s**

4)正如其他人所建议的那样,重新启动您的 Rails 应用程序

您可以在命令行中使用 ctrl+c 执行此操作,然后rails s再次启动它。

于 2013-07-09T01:53:53.927 回答