我们需要在rails 3.2 app中定义4个自定义操作。这4个操作负责创建和编辑客户登录。在routes.rb中,这里添加了routes.rb:
member do
get :new_customer_login
put :create_customer_login
get :edit_customer_login
put :update_customer_login
end
rake routes
显示正确的路线:
new_customer_login_user GET /users/:id/new_customer_login(.:format) authentify/users#new_customer_login
create_customer_login_user PUT /users/:id/create_customer_login(.:format) authentify/users#create_customer_login
edit_cutomer_login_user GET /users/:id/edit_cutomer_login(.:format) authentify/users#edit_cutomer_login
update_customer_login_user PUT /users/:id/update_customer_login(.:format) authentify/users#update_customer_login
然而,当我们启动规范并且没有路由错误时:
No route matches {:action=>"new_customer_login", :controller=>"authentify/users"}
我们所做的是将routes.rb中的member
更改为collection
:
collection do
get :new_customer_login
put :create_customer_login
get :edit_customer_login
put :update_customer_login
end
令人惊讶的是,no route
错误消失了,调试成功定义了new_customer_login
。我们不清楚为什么collection
而不是member
路由起作用。这4个动作真正在单个记录上工作。有人可以提供推理,为什么收集但不是成员在这里工作以及如何解决?
答案 0 :(得分:0)
No route matches {:action=>"new_customer_login", :controller=>"authentify/users"}
此消息实际上表明构建URL的参数不足(缺少id)。
成员操作应该路由到单个记录和集合路由到记录集合。这就是成员操作的路径助手期望接收模型对象或id作为参数的原因。
您应该在规范中致电new_customer_login_user(user)
user
是用户对象。
您似乎也在定义标准CRUD操作,而CustomerLogin是项目中的资源。在这种情况下,请考虑使用嵌套资源,以便rails自动生成它们。请参阅http://guides.rubyonrails.org/routing.html#nested-resources
上的文档