我是一般的编程新手,有人把我推荐给railstutorial.org。
规范:我正在使用cloud9 IDE,如教程中所述。
信息:我在使用rails的1.3教程,即设置根路由。 问题是最初我的路由没有影响服务器启动(根页面仍然是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并重新启动,特别注重细节,特别是版本。
我尝试过$ rake路线,而我理解它会给出消息:
You don't have any routes defined!
这让我相信问题是routes.rb文件。我尝试将语法更改为:
root to: 'application#hello'
我不知道很多,例如它如何使用应用程序,所以我也试过:
root 'ApplicationController#hello'
和
root to: 'ApplicationController#hello'
这些都导致无路由定义消息。我不知道发生了什么。
感谢您的任何意见或帮助!
答案 0 :(得分:1)
您可能希望将该操作移出ApplicationController
到另一个控制器之外,但如果您真的坚持,可以将其放入routes.rb
:
get '/hello', to: 'application#hello', as: :hello
如果您希望页面为root
,我建议您创建StaticPagesController
并在其中定义hello
,而不是将其放在ApplicationController中。
运行rails g controller static_pages
在StaticPagesController.rb
内,复制并粘贴hello
内的ApplicationController
方法。
将routes.rb
更改为root 'static_pages#hello
。
你应该得到你想要的结果。
答案 1 :(得分:1)
您可以在路线中尝试root 'application#hello'
。此外,当开始在浏览器上尝试之前忘记保存文件这样的简单事情时可能会漏掉;重新启动服务器可以解决数量惊人的问题。
rails documentation还可以为您提供教程之外的更多信息。
答案 2 :(得分:1)
我遵循了相同的教程,我可以说,如果您不熟悉编程,前两章中介绍的内容非常复杂。只有在您完成整个教程之后,您才会清楚地知道这个路由事件(或这些章节中的任何其他细节)是如何工作的。 但是,由于这种路由思想非常重要,因此即使您处于本教程的早期阶段,理解其工作原理并不是一个坏主意。
您可以在rails中创建路线的方式是首先指定适当的HTTP verb(GET
,POST
,PATCH
,DELETE
)适当的路径,控制器的名称,后跟哈希符号(#)和控制器中定义的操作的名称。
这里controller
只是一个ruby类,而action
是一个ruby方法。 (由于轨道上的ruby的基本原理是"convention over configuration",因此习惯controller
,action
,routing
等术语非常重要。)
当你说
时get '/hello' => "application#hello"
(是的,您可以使用=>
代替to:
)takeriho建议,会发生GET
对/hello
类型网址的请求1}}(/
是www.example.com/
中的“根路径”(注意最后的/
)将被路由到名为hello
的操作或方法在名为ApplicationController
的控制器或类中定义。
如果您查看application_controller.rb
,可以看到在hello
类中定义了ApplicationController
方法。
class ApplicationController < ActionController::Base
.....
def hello
render text: "Hello, world!"
end
end
现在,如果您要指定根路由,这是您的原始问题,您可以执行root
后跟控制器名称,井号(#)和类名称。所以代码
root "application#hello"
表示对表单/
的url或者在rails约定中调用的root_path
的请求将被路由到定义为hello
的操作(或方法)在名为ApplicationController
的控制器(或类)中。您可以通过执行
get '/' => "application#hello", as: :root
(您可以通过添加as: :custom_name
来命名路线)但是rails很聪明,知道两者是等价的。遵循rails约定可以使任务变得更容易。
如果您是Rails的新手,我强烈建议您在浏览Ruby on Rails教程之前查看Pragmatic Studio中的Rails课程,正如作者所建议的那样,这不是一个完整的初学者。这种方法对我来说非常合适。 Pragmatic Studio提供的rails课程假设您没有关于编程的先验知识,并以比我在此答案中更清楚的方式解释基础知识。
快乐编码:)