【问题标题】:Params not being passed to method in Rails 3.0.3参数未传递给 Rails 3.0.3 中的方法
【发布时间】:2011-01-28 17:43:34
【问题描述】:

在我从 Rails 2.3.4 升级到 Rails 3.0.3 后,我遇到了另一个非常令人费解的问题。

我正在使用以下 URL 调用“显示”控制器方法:

/verse/10

我在终端中看到了这个

开始为 127.0.0.1 获取“/verse/10” 在 2011-01-27 16:17:58 -0800

由 VersesController 处理#show 作为 HTML
* 搜索带有 ID 的诗句:

渲染的 verses/show.html.erb 内 布局/应用程序(76.6 毫秒)

在 1006 毫秒内完成 200 次 OK(查看次数: 125.4 毫秒 |活动记录:9.8 毫秒)

诗歌展示方法很简单:

  def show
    logger.debug("*** Searching for verse with ID: #{params[:id]}")
    @vs = Verse.find(params[:id])
  end

路由定义如下:

match '/verse/:id', :to => 'verses#show', :as => 'verse'

问题:在本例中为 '10' 的参数 ID 没有被传递给控制器​​方法,因此抛出 404,因为 params[:id] 为 nil。

“rake routes | grep verse”的输出如下:

verse /verse/:id(.:format) {:controller=>"verses", :action=>"show"}

我在这方面花了很长时间,但感觉好像我错过了一些非常明显的东西。


这是完整的 rake 路由输出:

                   login        /login(.:format)                                  {:controller=>"sessions", :action=>"new"}
                  logout        /logout(.:format)                                 {:controller=>"sessions", :action=>"destroy"}
                register        /register(.:format)                               {:controller=>"users", :action=>"create"}
                  signup        /signup(.:format)                                 {:controller=>"users", :action=>"new"}
                activate        /activate/:activation_code(.:format)              {:activation_code=>nil, :controller=>"users", :action=>"activate"}
         forgot_password        /forgot_password(.:format)                        {:controller=>"passwords", :action=>"new"}
         change_password        /change_password/:reset_code(.:format)            {:controller=>"passwords", :action=>"reset"}
        open_id_complete GET    /opensession(.:format)                            {:controller=>"sessions", :action=>"create"}
          open_id_create GET    /opencreate(.:format)                             {:controller=>"users", :action=>"create"}
                   users GET    /users(.:format)                                  {:action=>"index", :controller=>"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"}
                         PUT    /users/:id(.:format)                              {:action=>"update", :controller=>"users"}
                         DELETE /users/:id(.:format)                              {:action=>"destroy", :controller=>"users"}
               passwords GET    /passwords(.:format)                              {:action=>"index", :controller=>"passwords"}
                         POST   /passwords(.:format)                              {:action=>"create", :controller=>"passwords"}
            new_password GET    /passwords/new(.:format)                          {:action=>"new", :controller=>"passwords"}
           edit_password GET    /passwords/:id/edit(.:format)                     {:action=>"edit", :controller=>"passwords"}
                password GET    /passwords/:id(.:format)                          {:action=>"show", :controller=>"passwords"}
                         PUT    /passwords/:id(.:format)                          {:action=>"update", :controller=>"passwords"}
                         DELETE /passwords/:id(.:format)                          {:action=>"destroy", :controller=>"passwords"}
                 session POST   /session(.:format)                                {:action=>"create", :controller=>"sessions"}
             new_session GET    /session/new(.:format)                            {:action=>"new", :controller=>"sessions"}
            edit_session GET    /session/edit(.:format)                           {:action=>"edit", :controller=>"sessions"}
                         GET    /session(.:format)                                {:action=>"show", :controller=>"sessions"}
                         PUT    /session(.:format)                                {:action=>"update", :controller=>"sessions"}
                         DELETE /session(.:format)                                {:action=>"destroy", :controller=>"sessions"}
                  quests GET    /quests(.:format)                                 {:action=>"index", :controller=>"quests"}
                         POST   /quests(.:format)                                 {:action=>"create", :controller=>"quests"}
               new_quest GET    /quests/new(.:format)                             {:action=>"new", :controller=>"quests"}
              edit_quest GET    /quests/:id/edit(.:format)                        {:action=>"edit", :controller=>"quests"}
                   quest GET    /quests/:id(.:format)                             {:action=>"show", :controller=>"quests"}
                         PUT    /quests/:id(.:format)                             {:action=>"update", :controller=>"quests"}
                         DELETE /quests/:id(.:format)                             {:action=>"destroy", :controller=>"quests"}
                   index        /home(.:format)                                   {:controller=>"verses", :action=>"index"}
            starter_pack        /starter_pack(.:format)                           {:controller=>"verses", :action=>"starter_pack"}
                   *verse        /verse/:id(.:format)                                 {:controller=>"verses", :action=>"show"}*
               tag_cloud        /tag_cloud(.:format)                              {:controller=>"verses", :action=>"tag_cloud"}
          show_user_info        /show_user_info(.:format)                         {:controller=>"admin", :action=>"show_user_info"}
               show_tags        /show_tags(.:format)                              {:controller=>"admin", :action=>"show_tags"}
                 contact        /contact(.:format)                                {:controller=>"info", :action=>"contact"}
                     faq        /faq(.:format)                                    {:controller=>"info", :action=>"faq"}
                tutorial        /tutorial(.:format)                               {:controller=>"info", :action=>"tutorial"}
               volunteer        /volunteer(.:format)                              {:controller=>"info", :action=>"volunteer"}
             leaderboard        /leaderboard(.:format)                            {:controller=>"info", :action=>"leaderboard"}
              stateboard        /stateboard(.:format)                             {:controller=>"info", :action=>"stateboard"}
            countryboard        /countryboard(.:format)                           {:controller=>"info", :action=>"countryboard"}
           referralboard        /referralboard(.:format)                          {:controller=>"info", :action=>"referralboard"}
                    news        /news(.:format)                                   {:controller=>"info", :action=>"news"}
          update_profile        /update_profile(.:format)                         {:controller=>"profile", :action=>"update_profile"}
               referrals        /referrals/:id(.:format)                          {:controller=>"profile", :action=>"referrals"}
             unsubscribe        /unsubscribe/*email(.:format)                     {:controller=>"profile", :action=>"unsubscribe"}
                edit_tag        /edit_tag/:id(.:format)                           {:controller=>"tag", :action=>"edit_tag"}
                  tweets        /tweets(.:format)                                 {:controller=>"tweets", :action=>"index"}
           load_progress        /load_progress/:user(.:format)                    {:controller=>"chart", :action=>"load_progress"}
                    root        /(.:format)                                       {:controller=>"sessions", :action=>"new"}
                    home        /home(.:format)                                   {:controller=>"sessions", :action=>"new"}
                                /:controller(/:action(/:id))(.:format)  

【问题讨论】:

  • 检查rake routes 的输出以确保这是匹配的实际路由。还有params.inspect的结果是什么?
  • 这可能是路由优先级问题...您可以发布您的routes.rb 文件吗?
  • 我已经添加了上面“rake routes”的输出。 Params.inspect 是一个空数组:Params.inspect: {}
  • 有没有机会使用open_id_authentication 插件?最近有一个类似的空参数哈希问题,通过删除这个不兼容的插件解决了这个问题。另一种选择是删除vendor/plugins 下的所有内容,看看这条路线是否有效,然后一次将它们添加回来。
  • Andy:dmarkow 询问的是“rake routes”输出,以检查是否有其他路由首先匹配。 grep 后的输出不行 - 请发布完整的输出。

标签: ruby ruby-on-rails-3


【解决方案1】:

如果您安装了open_id_authentication 插件,那可能会干扰您的路线。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 2011-10-17
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多