Ruby on Rails:未按预期加载视图

时间:2013-06-16 02:03:03

标签: ruby-on-rails ruby rails-routing

我是Rails(和本网站)的新手,并通过Lynda.com教程。我遇到了很多问题,因为该教程大约在3年前制作,似乎编程语言一直在变化。幸运的是,我已经弄清楚如何解决大多数问题,但有一个特别的问题阻碍了我前进。

版本:

Ruby 2.0.0p195

Mysql 14.14 dis 5.6.12

宝石2.0.3

我正在尝试连接到我的演示文件夹中的不同 .html.erb 页面,但我的脚本中的 def 无法识别它们。

这里的视觉示例: https://dl.dropboxusercontent.com/u/56018487/rubyexample.png

据我所知,“def hello”和“def other_hello”应自动在我的应用程序中的视图下的demo文件夹中查找hello.html.erb和other_hello.html.erb文件。但是,当我运行服务器并在地址栏中键入这些位置时,Firefox无法使用localhost:3000 / demo / hello或localhost:3000 / demo / other_hello找到它们。我确信这很简单,但是在网络搜索2天之后我还没有找到答案。

作为我的故障排除工作的一部分,我已尝试在已经注释掉的“def index”部分下的每个变体。当我没有注释掉获取“demo / index”时,我可以从“def index”部分进入每个页面,但不是来自“def hello”或“def other_hello”部分。

更新 我的目标是对我的问题进行动态回答。在Rails 2中,有一条优雅的单行代码可以处理所有传入的信息。

我希望这是有道理的。 如果您有任何建议,请告诉我。

向zeantsoi和Muntasim大声喊叫,帮助你解决这个问题。我会给你们每个人一点,但该网站不允许我这样做。

2 个答案:

答案 0 :(得分:2)

似乎你还没有定义你的路线。你可以通过runnng rake routes来确定你的路线是否存在。否则使用以下方法定义路线:

# config/routes.rb
match 'demo/hello', 'demo#hello'
match 'demo/other_hello', 'demo#other_hello'

或简单地说:

get 'demo/hello'
get 'demo/other_hello'

答案 1 :(得分:1)

您缺少DemoController行为的路线。像这样添加它们:

# config/routes.rb
match 'demo/hello', 'demo#hello'
match 'demo/other_hello', 'demo#other_hello'

有了这些路线,您可以分别访问路径helloother_hello来访问demo/hellodemo/other_hello行为。

您可以考虑的另一件事是为您的路线添加名称,这极大地方便了从控制器和视图的路由:

# config/routes.rb
match 'demo/hello', 'demo#hello', :as => demo_hello

然后,在您的视图(或控制器)中,您可以使用以下内容:

demo_hello_path #=> /demo/hello
demo_hello_url #=> hostname/demo/hello

编辑:

如果您希望动态路由到控制器和操作,可以使用以下匹配模式:

# config/routes.rb
match ':controller/:action'

请注意,根据此路线的执行顺序,它可能会覆盖(或被其他硬编码路线覆盖)。

作为一个FYI,官方Rails路由指南中的section on dynamic segments有助于确定事物的映射方式。