我阅读了一些网站和问题,但除了一个网站外,所有这些都远远超出了我的水平:
http://markconnell.co.uk/posts/2010/02/rails-3-routing-examples
我正在尝试使用为Rails 2制作的Head First Rails,到目前为止,它已经进展顺利了。到目前为止,我已经能够找到这些转换,这是自安装以来第一个让我感到困惑的地方。
它在config / routes.rb文件中说它应该是:
ActionController::Routing::Routes.draw do |map|
map.connect '/ads/:id', :controller=>'ads', :action=>'show'
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
首先关闭我的routes.rb文件默认第一行是
Mebay::Application.routes.draw do
所以我的第一次尝试是:
Mebay::Application.routes.draw do
map.connect '/ads/:id', :controller=>'ads', :action=>'show'
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
当失败时我尝试了这个:
Mebay::Application.routes.draw do'
map '/ads/:id' => 'ads#index'
end
然后我尝试了同样的事情,但添加了| map |到第一行。
最后,我尝试将其改为:
ActionController::Routing::Routes.draw do |map|
map '/ads/:id' => 'ads#index'
end
这些都没有奏效。有人可以帮帮我,我不知道我做错了什么。我有另一本书,Hartl的Ruby On Rails 3,但在索引中它甚至没有在路线上显示任何东西,所以甚至不知道在哪里看。
感谢您提供给我的任何帮助!
//编辑 - 我也尝试过阅读'/ ads /':id认为这可能是一个错误,因为它对我来说没有意义:id会在引号内。
//编辑2 - 这是Rake Routes返回的内容:
WARNING: 'require 'rake/rdoctask'' is deprecated. Please use 'require 'rdoc/task' (in RDoc 2.4.2+)' instead.
at /Users/Dennis/.rvm/gems/ruby-1.9.2-p318@rails3tutorial/gems/rake-0.9.2.2/lib/rake/rdoctask.rb
WARNING: Global access to Rake DSL methods is deprecated. Please include
... Rake::DSL into classes and modules which use the Rake DSL methods
WARNING: DSL method Mebay::Application#task called at /Users/Dennis/.rvm/gems/ruby-1.9.2-p318@rails3tutorial/gems/railties-3.0.1/lib/rails/application.rb:214:in `initialize_tasks'
/ads/:id(.:format) {:controller=>"ads", :action=>"show"}
/:controller/:action/:id(.:format)
/:controller/:action/:id.:format
错误讯息:
路由错误
没有路线匹配“/ ads / 3”
//编辑3 - 这是我的2个控制器文件的样子:
ads_controller:
class AdsController < ApplicationController
end
application_controller:
class ApplicationController < ActionController::Base
protect_from_forgery
end
//编辑4 -
在ads_controller.rb文件中尝试: class AdsController&lt; ApplicationController的 def show; 结束 端
也尝试在同一个文件中:
class AdsController < ApplicationController
end
def show;
end
我试图去的每一种方式
同样的错误仍然是“路由错误。没有路由匹配......”
答案 0 :(得分:5)
ActionController::Routing::Routes.draw do
match '/ads/:id' => 'ads#show'
match ':controller/:action/:id'
match ':controller/:action/:id.:format'
end
答案 1 :(得分:2)
我也在使用那本书,并通过rails 2和rails 3之间的区别。
我让这个工作。在routes.rb文件中,您需要做的就是在do和end之间添加:
resources :ads
关键是你的routes.rb文件只是将该资源发送到正确的位置。接下来要查看的是ads_controller.rb文件,您需要在其中添加以下内容:
#Get /ads/1
#Get /ads/1.json
def show
@ad = Ad.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @ad }
end
end
下一部分是在该章稍后添加索引。你需要在上面添加:
# GET /ads
# GET /ads.json
def index
@ads = Ad.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @ad }
end
end
基本上,如果你查看第1章routes.rb和控制器文件,你会看到scaffold配置了这样的rails 3应用程序。让我感到困惑的另一件事是我只能通过将它放在/ app / assets / stylesheets并编辑application.html.erb并将样式表链接设置为如下来获得javascript:
<%= stylesheet_link_tag "application", :media => "default.css" %>
享受
答案 2 :(得分:1)
如果您使用的是Rails 3,则不希望执行Rails 2教程。有很多好的rails 3教程。有关路线的问题,请参阅下面的博客文章,这可能会帮助您解决问题。
http://gregmoreno.wordpress.com/2010/08/12/rails-3-upgrade-part-2-routes/
答案 3 :(得分:1)
尝试将此作为您的路线文件。从Head First Rails的第2章开始,我遇到了同样的问题。但这解决了我的问题
Mebay::Application.routes.draw do
controller 'ads' do
match 'ads/:id' => :show
end
end