- Windows XP SP2
- Internet Explorer 6
- ruby 1.9.2p136 (2010-12-25) [i386-mingw32]
- Rails 3.0.3
上記環境にて、link_to :method => :delete が正しく動作しない。
scaffold で生成したコンテンツでもダメだった。
原因を調査してみたら、rails.js 内の以下の箇所で TypeError が発生していた。
function handleMethod(element) { var method = element.readAttribute('data-method'), url = element.readAttribute('href'), csrf_param = $$('meta[name=csrf-param]')[0], csrf_token = $$('meta[name=csrf-token]')[0]; var form = new Element('form', { method: "POST", action: url, style: "display: none;" }); element.parentNode.insert(form); // ←←←この箇所 if (method !== 'post') { var field = new Element('input', { type: 'hidden', name: '_method', value: method }); form.insert(field); } if (csrf_param) { var param = csrf_param.readAttribute('content'), token = csrf_token.readAttribute('content'), field = new Element('input', { type: 'hidden', name: param, value: token }); form.insert(field); } form.submit(); }
debug してみると、たしかに element.parentNode に insert という function は存在していなかった。
とりあえず、以下のように修正することで回避可能。
// element.parentNode.insert(form); element.insert(form);
以下の環境だと、上記修正を行わなくてもちゃんと動いた。
- Ubuntu 10.04
- Google Chrome 10, Firefox 4.0
- ruby 1.9.2p136 (2010-12-25 revision 30365) [i686-linux]
- Rails 3.0.4
怪しいのは IE6。別バージョンで試すことができない環境なのでどうしようもない。
んー、おかしい。
1 件のコメント:
IE6で同じ症状に見舞われ、悩んでいました。
おかげさまで解決できました。
コメントを投稿