解决了Rails的ActionController::MethodNotAllowed问题

来源:互联网 发布:unity3d能建模吗 编辑:程序博客网 时间:2024/04/28 04:06

原创文章,版权归 胡添发(hutianfa@163.com)所有,转载请注明出处:
http://blog.csdn.net/aidisheng/archive/2008/09/10/2911052.aspx

 

   昨天研究Rails中使用Extjs的Desktop的例子,官方给的例子都是使用php做服务端,把php翻译成Rails并不难,而且,使用Rails来写,代码量只是php的十分之一左右(当然,并不能简单的一句一句翻译,需要修改一些数据库的设计)。过程中遇到的第一个问题是:在登录界面处理中出现了下面的异常:

    ActionController::MethodNotAllowed (Only get, put, and delete requests are allowed.):

    一开始以为可能是因为Extjs使用的是js来发送请求时没有指定method参数,仔细检查过代码之后,并不是这样的问题,后来上网查了很久,大部分的信息都是英文的,而且都没有讲具体的解决办法。

以前我曾经也遇到过这样的问题,只是项目虽然使用SVN来管理了,但并没有太详细地记录解决的办法,这个教训真的以后要好好吸取了(当然,这也是现在要写成博客的重要原因)。下面是分析过程和解决办法:

    首先要想办法获取客户端发送给服务端的数据--查看日志:

Processing ApplicationController#login (for 127.0.0.1 at 2008-09-09 23:06:59) [POST]

  Session ID: BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo

SGFzaHsABjoKQHVzZWR7AA==--d50a249f3e193b1578c6f971b8e884437ff6caa7

  Parameters: {"UserName"=>"demo", "action"=>"login", "Password"=>"demo"}

 

    第一感觉到的问题是请求中(Parameters: {"UserName"=>"demo", "action"=>"login", "Password"=>"demo"})并没有controller的信息,于是,我再三检查了js代码,发现路径上明确是有的。看到http请求带有一个参数,我第一反应就是添加多一个controller的参数,添加之后,在服务器端是出现了controller的数据,但问题仍然存在。

    后面还不断去研究别的例子中是怎么传递参数的,理解了之后,还是没有找到原因。回到家中吃完晚饭,我又一头扎进去了。功夫不负有心人,最后检查日志的时候,注意到了服务端处理该请求的并不是我写的那个controller,而是ApplicationController,它并没有login方法,出错是理所当然的了。

    真正的原因是请求的url中,我没有写正确controller的名字,这样,服务器就默认交给了ApplicationController来处理了。修改了正确的名字之后,登录功能一切正常,桌面已经展现出来了。

    后续还有其他的功能需要继续完成。

 

原创粉丝点击