你能帮我把这条路线改成三号轨道吗



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

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

最新更新