我是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大声喊叫,帮助你解决这个问题。我会给你们每个人一点,但该网站不允许我这样做。
答案 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'
有了这些路线,您可以分别访问路径hello
和other_hello
来访问demo/hello
和demo/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有助于确定事物的映射方式。