在学习 Rails 时,我创建了一个应用程序,其中包含一个Domains
嵌套在控制器下方的Customers
控制器。我正在使用 Rails 2.3.4,这是一次学习经历。我设法设置了以下路由:
customer_domains GET /customers/:customer_id/domains(.:format) {:controller=>"domains", :action=>"index"}
POST /customers/:customer_id/domains(.:format) {:controller=>"domains", :action=>"create"}
new_customer_domain GET /customers/:customer_id/domains/new(.:format) {:controller=>"domains", :action=>"new"}
edit_customer_domain GET /customers/:customer_id/domains/:id/edit(.:format) {:controller=>"domains", :action=>"edit"}
customer_domain GET /customers/:customer_id/domains/:id(.:format) {:controller=>"domains", :action=>"show"}
PUT /customers/:customer_id/domains/:id(.:format) {:controller=>"domains", :action=>"update"}
DELETE /customers/:customer_id/domains/:id(.:format) {:controller=>"domains", :action=>"destroy"}
customers GET /customers(.:format) {:controller=>"customers", :action=>"index"}
POST /customers(.:format) {:controller=>"customers", :action=>"create"}
new_customer GET /customers/new(.:format) {:controller=>"customers", :action=>"new"}
edit_customer GET /customers/:id/edit(.:format) {:controller=>"customers", :action=>"edit"}
customer GET /customers/:id(.:format) {:controller=>"customers", :action=>"show"}
PUT /customers/:id(.:format) {:controller=>"customers", :action=>"update"}
DELETE /customers/:id(.:format) {:controller=>"customers", :action=>"destroy"}
root / {:controller=>"customers", :action=>"index"}
但是,由于路由错误,域控制器的所有测试都失败了。
例如,下面的测试(由 Rails 的资源生成器生成)失败,DomainsControllerTest
类中的所有其他测试也是如此。
class DomainsControllerTest < ActionController::TestCase
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:domains)
end
end
它失败并出现错误:
No route matches {:action => "index", :controller => "domains"}
这是有道理的,因为默认路由不再存在,并且需要@customer
设置域控制器。我花了一个下午寻找所需的更改,但几乎每个站点都在谈论 Rspec 测试而不是常规的 Rails 测试。
如何修改它domains_controller_test.rb
以便理解嵌套资源?