script/generate controller创建Modules的问题
今天在项目里准备把管理功能移进后台系统,于是创建根据controller的examples创建了一个模块:
Modules Example:
`./script/generate controller ‘admin/credit_card’ suspend late_fee`
Credit card admin controller with URLs /admin/credit_card/suspend.
Controller: app/controllers/admin/credit_card_controller.rb
Views: app/views/admin/credit_card/debit.html.erb [...]
Helper: app/helpers/admin/credit_card_helper.rb
Test: test/functional/admin/credit_card_controller_test.rb
./script/generate controller 'admin/credit_card'
因为安全方面的问题,文章里的module名都用帮助实例里的名字代替。
我使用如上的方法创建了一个module以后,在浏览器里是直接不能访问的,于是又在routes.rb里添加路由映射的命名空间:
map.namespace :admin do |admin|
admin.resources :credit_card
end
这样做了以后就有一个奇怪的现象产生。
除了index这个action,所有不带id的action全部无法访问,
例如admin/credit_card/edit/1是可以的,但是admin/credit_card/add这个action
返回的结果就是:
No action responded to show
奇怪的是给它带上参数就可以了,也就是当我访问admin/credit_card/add/1就能正确显示,尽管这个id没有任何作用。
服务器的日志显示情况,带参数的:
Parameters: {“action”=>”edit”, “id”=>”1″, “controller”=>”admin/credit_card”
不带参数的错误情况:
Parameters: {“action”=>”show”, “id”=>”add”, “controller”=>”admin/credit_card”
尝试继续修改routes.rb却未果。
于是我destroy这个module,还原了routes.rb,用另一种方法创建:
./script/generate controller 'admin::credit_card'
注意,这里只是把例子里的”/”改成了”::”,重新生成以后一切正常,连routes.rb也没有修改。
服务器的日志也显示:
Parameters: {“action”=>”add”, “controller”=>”admin/credit_card“}
目前看来要正确的生成模块需要使用::做分割符。