0

我是 Rails(和这个站点)的新手,并且正在学习 Lynda.com 教程。我遇到了很多问题,因为该教程是大约 3 年前制作的,而且编程语言似乎在此过程中发生了变化。幸运的是,我已经找到了解决大多数问题的方法,但是有一个特定的问题使我无法继续前进。

版本:

红宝石 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”应该在我的应用程序视图下的演示文件夹中自动查找 hello.html.erb 和 other_hello.html.erb 文件。但是,当我运行服务器并在地址栏中键入这些位置时,Firefox 没有使用 localhost:3000/demo/hello 或 localhost:3000/demo/other_hello 找到它们。我确信这真的很容易,但是经过 2 天的网络搜索后,我还没有找到答案。

作为我的故障排除工作的一部分,我已经在已注释掉的“def index”部分下尝试了每个单独的变体。当不注释掉get "demo/index"时,我可以从 "def index" 部分访问每个页面,但不能从 "def hello" 或 "def other_hello" 部分访问。

更新: 我的目标是为我的问题获得动态答案。在 Rails 2 中,有一个优雅的单行代码来处理所有传入的信息。

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

在这件事上向 zeantsoi 和 Muntasim 大声疾呼。我会给你们每个人一分,但该网站不允许我这样做。

4

2 回答 2

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'
于 2013-06-16T02:16:38.107 回答
1

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

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

有了这些路线,您可以分别访问路径和来访问hello和操作。other_hellodemo/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'

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

作为一个仅供参考,官方 Rails 路由指南中关于动态段的部分有助于弄清楚事物是如何映射的。

于 2013-06-16T02:14:51.300 回答