我读了一些网站和问题,但除了一个网站:之外,所有的都远远超出了我的水平
http://markconnell.co.uk/posts/2010/02/rails-3-routing-examples
我正在努力学习为Rails2制作的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,但在索引中,它甚至没有显示Routes上的任何内容,所以甚至不知道该在哪里查找。
谢谢你能给我的任何帮助!
//EDIT-我也试着用它读"/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文件中尝试:类AdsController<应用程序控制器def show;终止结束
也在同一文件中尝试过:
class AdsController < ApplicationController
end
def show;
end
每次我都试着去
- localhost:3000/mebay/ads/3
- localhost:3000/ads/3
- localhost:3000/show/ads/3
- localhost:3000/mebay/show/ads/3
相同的错误仍然是"路由错误。没有路由匹配…"
ActionController::Routing::Routes.draw do
match '/ads/:id' => 'ads#show'
match ':controller/:action/:id'
match ':controller/:action/:id.:format'
end
我强烈建议您阅读以下文档:http://apidock.com/rails/ActionDispatch/Routing
我也在使用那本书,并了解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应用程序。还有一件事让我很困惑,那就是我只能把javascript放在/app/assets/stylesheets中,编辑application.html.erb,然后把样式表链接设置为这样:
<%= stylesheet_link_tag "application", :media => "default.css" %>
享受
如果您使用的是Rails 3,您不想做Rails 2教程。有很多不错的rails 3教程。关于路线的问题,请参阅下面的博客文章,这可能会帮助你弄清楚。
http://gregmoreno.wordpress.com/2010/08/12/rails-3-upgrade-part-2-routes/
尝试将其作为Routes文件。在Head First Rails的第2章中,我也遇到了同样的问题。但这为我解决了
Mebay::Application.routes.draw do
controller 'ads' do
match 'ads/:id' => :show
end
end