gpt4 book ai didi

ruby-on-rails - Rails 3.0 中的奇怪路由错误

转载 作者:行者123 更新时间:2023-12-04 06:22:51 24 4
gpt4 key购买 nike

我一直在将我的 Rails 2.3.9 应用程序转换为 Rails 3.0,一切进展顺利。我用新系统创建了很多路线,所以我觉得我知道如何做到这一点。但是,我最近遇到了一个无法解决的路由错误。

我有一个这样定义的用户资源:

resources :users do
member do
get 'activate'
get 'edit_password'
post 'update_password'
end

collection do
get 'forgot_password'
post 'send_reset_instructions'
end
end

失败的路线是 update_password。如果我将其更改为 get 方法,它就可以工作。但不是用作帖子时,数据来自“edit_password”中的表单。

这是错误消息:
Routing Error

No route matches "/users/31/update_password"

这是 rake 路由的(相关)输出:
                activate_user GET    /users/:id/activate(.:format)                               {:action=>"activate", :controller=>"users"}
edit_password_user GET /users/:id/edit_password(.:format) {:action=>"edit_password", :controller=>"users"}
update_password_user POST /users/:id/update_password(.:format) {:action=>"update_password", :controller=>"users"}
forgot_password_users GET /users/forgot_password(.:format) {:action=>"forgot_password", :controller=>"users"}
send_reset_instructions_users POST /users/send_reset_instructions(.:format) {:action=>"send_reset_instructions", :controller=>"users"}
users GET /users(.:format) {:action=>"index", :controller=>"users"}
users POST /users(.:format) {:action=>"create", :controller=>"users"}
new_user GET /users/new(.:format) {:action=>"new", :controller=>"users"}
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"}
user GET /users/:id(.:format) {:action=>"show", :controller=>"users"}
user PUT /users/:id(.:format) {:action=>"update", :controller=>"users"}
user DELETE /users/:id(.:format) {:action=>"destroy", :controller=>"users"}

最后,这是该请求 (webrick) 的 Web 服务器的输出:
Started POST "/users/31/update_password" for 127.0.0.1 at 2010-10-14 23:30:59 +0200
SQL (1.5ms) SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
SQL (0.7ms) SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'


ActionController::RoutingError (No route matches "/users/31/update_password"):


Rendered /home/jonatan/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.0/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.0ms)

你能从中找到任何逻辑吗?

我正在使用通过 gem (3.0.1) 提供的最新 Rails。起初我确实在 User-model 中覆盖了 *to_param* 以使用用户名,但无论如何问题都是一样的。

我检查了模型的 update_password 方法中的拼写错误,并确保它不是私有(private)的。

最佳答案

我也注意到了这一点,仅使用 POST 方法并且仅在使用“成员”时,与您的示例相同,即:

resources :forum_posts do
member do
post :preview
end
end

将触发此操作,但将其更改为 GET 或使用集合都可以正常工作,因此似乎是 rails 路线的错误;我现在通过在我的资源上方添加以下内容来解决这个问题:forum_posts do 行:
match '/forum_posts/:id/preview(.:format)', :to => "forum_posts#preview", :as => :preview_forum_post

然后一切继续工作;简单的临时修复。

关于ruby-on-rails - Rails 3.0 中的奇怪路由错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com