你能帮我把这条路线转换成rails 3吗?

时间:2012-04-03 02:06:05

标签: ruby-on-rails ruby-on-rails-3 routes

我阅读了一些网站和问题,但除了一个网站外,所有这些都远远超出了我的水平:

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

我试图去的每一种方式

  • 本地主机:3000 / mebay /广告/ 3
  • 本地主机:3000 /广告/ 3
  • 本地主机:3000 /显示/广告/ 3
  • 本地主机:3000 / mebay /显示/广告/ 3

同样的错误仍然是“路由错误。没有路由匹配......”

4 个答案:

答案 0 :(得分:5)

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

答案 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