0

我是 Rails 新手,正在努力解决似乎是路由错误。

我有一个 Site 对象,其中包含有关网站以及如何抓取它的信息。我想测试我的代码与站点的连接。在我的应用程序中单击“测试站点”会产生错误:

Couldn't find Site without an ID

app/controllers/sites_controller.rb:86:in `test_site'

路线.rb

...
      post "/test_site" => "sites#test_site" 
      get "home/index"
      resources :sites, :logins
...

index.html.erb

...    
      <% @sites.each do |site| %>
      <tr>
        <td>
            <%= form_tag test_site_path(site) do -%>
            <div><%= submit_tag 'Test site' %></div>
            <% end -%>
...

站点控制器.rb

...
      def test_site
        @site = Site.find(params[:id])
...

看起来站点控制器没有从 test_site_path(site) 获取站点:id。我不确定如何设置路线并正确传递 ID。

谢谢!

编辑:我尝试将此代码添加到我的 routes.rb 中:

resources :sites do 
  get "/test_site", :action => "test_site", :on => :member 
end 

我收到此错误:

No route matches {:controller=>"sites", :action=>"test_site", :format=>#<Site id: 11, ... 

我可能做错了什么?

4

1 回答 1

0

对于新手,我可以告诉您的最好的事情是在添加新功能时开始编写控制器测试,因为它有助于调试此类问题。使用安静的动作而不是创建自己的动作。尝试使用 index、new、edit、create、update、show、destroy 代替。

sites_controller_spec.rb

require 'spec_helper'

describe SitesController do
  let(:site) { Site.create() } #Add to create what a site requires, eventually this will become a fixture but don't worry about that now
  describe "#show" do
   before { get :show, id: site.to_param }
   it "responds with success" do
     response.should be_success
   end
  end
end

运行此测试。它会告诉你没有路线

路线.rb

资源:站点,仅:%w[显示]

运行此测试。它会失败并告诉您创建站点控制器和显示操作:

class SitesController < ApplicationController
  def show
  end
end

再次运行测试。它现在会抱怨,因为没有视图。

查看 -> 创建目录(站点) -> 在里面创建一个文件 show.html.erb

再次运行测试。现在正在过去。您的路由现在使用 REST 正常工作,并且检查它是否工作现在是自动化的。

现在这可能看起来有点模仿,但我保证如果你养成这种习惯,它将成为第二天性,你将不必再次处理路由错误。

于 2013-03-24T02:57:51.890 回答