2016-04-30 55 views
0

我是一般的编程新手,有人提到我到railstutorial.org。Rails教程 - 无法获取路径来识别路线

规格:我正在研究cloud9 IDE,正如教程中所建议的。

信息:我在1.3的rails教程中,它是设置根路线。 问题是最初我的路由没有影响服务器启动(根页面仍然是ruby默认的,而不是'application#hello')。以下是教程说要编辑的文件。

的routes.rb

Rails.application.routes.draw do 
root to: 'application#hello' 
end 

application_controller.rb

class ApplicationController < ActionController::Base 
protect_from_forgery with: :exception 
def hello 
render text: "Hello, world!" 
end 
end 

有很多是被默认成我离开了文件的注释。

我按照说明精确。在我第一次遇到麻烦之后,我想我可能已经发生了安装错误,所以我删除了我的IDE并重新启动,特别注意细节,特别是版本。

我已经试过$耙路线,我的理解它给人的消息:

You don't have any routes defined! 

这使我相信,问题是的routes.rb文件。我曾试图改变语法:

root to: 'application#hello' 

我不知道了一大堆,比如它如何使用应用程序工作,所以我也试过:

root 'ApplicationController#hello' 

root to: 'ApplicationController#hello' 

这些都导致没有路由定义的消息。我不知道发生了什么事。

感谢您的任何意见或帮助!

+0

'根:“应用程序#hello''和'根”应用#hello''做同样的事情 - 后来是一条捷径。由于rails查找控制器的方式,'root'ApplicationController#hello''将不起作用。 – max

回答

1

您可以在您的航线上尝试root 'application#hello'。另外,在尝试浏览器之前忘记保存文件等简单的事情时,可能会漏掉;重新启动服务器需要处理数量惊人的弱点。

rails documentation还可以为您提供超出本教程的更多信息。

+0

谢谢!我保存了该文件,现在它正在工作。大概2个小时的挫折感,它通过一个简单的文件保存解决... – ncooper09

+0

很高兴它工作:) – gonzalo2000

1

你可能想移动ApplicationController到另一个控制器之外的行动,但如果你真的坚持,你可以把这个到您的routes.rb

get '/hello', to: 'application#hello', as: :hello

如果你希望页面是root,我建议在那里创建一个StaticPagesController并定义hello,而不是将它放在ApplicationController中。

这里是你可以做什么:

  1. 运行rails g controller static_pages

  2. 里面你StaticPagesController.rb,复制和粘贴hello方法在里面ApplicationController

  3. routes.rb更改为root 'static_pages#hello

你应该有你想要的结果。

+0

railstutorial在第一章中做了这个,你可以制作这个一次性应用程序,只是为了启动和运行。其中一个更加不可思议的部分。当然,你不想在'ApplicationController'中这样做,因为你正在给应用程序中的所有控制器一个'hello'动作。 – max

1

我遵循同一个教程,我可以说,前两章所涉及的材料起初相当复杂,如果你是新手编程。只有在你完成了整个教程之后,你才会清楚这个路由选择(或者这些章节中的其他细节)是如何实际工作的。 但是,由于这种布线思路非常重要,即使您处于教程的早期阶段,了解它的工作原理也不失为一个好主意。


您可以创建在轨道路线的方式是,先指定一个合适的HTTP verbGETPOSTPATCHDELETE)用适当的路径,控制器的名称,后跟一个井号( #)和控制器中定义的动作的名称。

这里controller只是一个ruby类和action红宝石方法。 (由于红宝石on Rails的基本原理是"convention over configuration",重要的是要习惯的术语,如controlleractionrouting等)

当你说

get '/hello' => "application#hello" 

(是的,你可以代替to:)使用=>作为takeriho表明,什么情况是,一个GET请求类型/hello的URL(/是“根路径”为www.example.com/(注意/末))将被路由到ACTI或名为hello的控制器或类中定义的名为ApplicationController的类。

如果你看一下application_controller.rb,你会发现在类ApplicationController中定义了一个方法hello

class ApplicationController < ActionController::Base 
    ..... 

    def hello 
    render text: "Hello, world!" 
    end 
end 

现在,如果要指定一个根路径,这是你原来的问题,你可以做root后跟一个控制器,一个哈希符号(#)的名称,名称一类。因此,代码

root "application#hello" 

意味着对形式/,或root_path的URL的请求,因为它就是所谓的在轨惯例,将被路由到指定的动作(或方法)hello在控制器定义(或一个类)名为ApplicationController。你可以通过做

get '/' => "application#hello", as: :root 

(你可以命名通过添加as: :custom_name路由)实现相同的结果,但Rails是一个足够聪明,知道这两个是等价的。按照轨道惯例,任务变得更容易。


如果你是完全新的Rails的,我强烈建议你之前通过Ruby on Rails的教程,正如笔者建议,是不是一个完整的初学者要在Pragmatic Studio检查出的Rails的课程。这种方法对我来说非常合适。 Pragmatic Studio提供的铁路课程假设您对编程没有预先的知识,并且以比我在这个答案中更清晰的方式解释基础知识。

编码愉快:)

+0

感谢您的信息! @ gonzalo2000实际上帮助我解决了我提出的问题。我只需在重新启动服务器之前进行保存。我在Visual Studio中工作过一些,并且从IDE启动服务器不需要保存文件。现在显然Rails Tutorial中使用的方法在IDE外部启动,因此可以访问保存的文件,而不像它们在IDE中那样。我一定会考虑实用工作室 - 这听起来很有帮助! – ncooper09