又踩到 rails 地雷了..
小心小心,以下會有奇怪的問題,看半天完全不懂為什麼。
map.resources :tags, :collection => {:edit => :get}
東翻西找,南試北踹,終於放棄,耐著性子翻 source code, 總算抓到兇手:
actionpack-2.1.0/lib/action_controller/resources.rb: 557
require_id = !resource.kind_of?(SingletonResource)
我的 tags 是 resource"s", 所以不是 SingletonResource,
這邊 require_id 就會是 true. 這還不打緊,繼續往下看:
564 行:
else
default_options.merge(
add_conditions_for(resource.conditions, method)).
merge(resource.requirements)
明明就算有 require_id 也不會怎麼樣啊,究竟為何產生的 routes 需要 id??
formatted_edit_tags GET
/tags/edit.:format
{:action=>"edit", :controller=>"tags", :id=>/[^\/.?]+/}
那個 id => 到底是怎麼生出來的??亂餵他 id 可還過不了,會死在啥 extra_key.
繼續往上看,發現:
when "show", "edit";
default_options.merge(
add_conditions_for(resource.conditions, method ||
:get)).merge(resource.requirements(require_id))
非常好!!原來是撞名了 :o
千萬記住 :member => 和 :collection => 不能取跟 rails 一樣的名字,
不然大概又會撞名然後就出事吧...
我以為 routes 應該要可以 override 才對。把 edit 改名為 edit2 後,
運作良好... 好吧,我想想看有什麼比較好的名字。edit_massively 嗎?
0 retries:
Post a Comment
Note: Only a member of this blog may post a comment.