【问题标题】:path helper generating exeception on console while migrating from Rails-2 to Rails-3从 Rails-2 迁移到 Rails-3 时,路径助手在控制台上生成异常
【发布时间】:2015-10-01 11:48:28
【问题描述】:

我正在尝试修改我的脚本,我正在从 rails 2.3 迁移到 rails 3.1,但我遇到了一个奇怪的问题。我看到当我使用这样的路径助手时

在 rails 3.1 中我遇到了一个异常,但是 rails 2.3 它曾经可以工作,我所说的工作是指当我向路径助手传递值并且 order.customer_id 为 nil 时,它会生成一个创建新客户的路径,但是在 rails 3.1我看到它产生了一个异常,下面是我在 rails 3.1 中看到的错误的描述

helper.link_to customer_email, app.store_customer_path(store,order.customer_id) ,当 order.customer_id 为空白时,我在控制台上收到如下异常

以下是我在 rails 2.3 中观察到的错误

ActionController::RoutingError: store_customer_url 无法从 {:controller=>"customers", :action=>"show", :store_id=#<object>}

生成

。但是当我加载一个网页时,我看到我生成了一个路径来创建一个新客户。

这是我的相关 routes.rb 代码

        resources :stores do
      resources :customers do
        collection do 
          get :get_customers, :download, :csv_template
        end
        match :upload, :import, :map, :on => :collection
        member do
          get :more
        end
        resources :dropship_profiles
        resources :address
      end
end

但是在 Rails 3.1 中

在控制台上我看到异常,当从浏览器加载时我也看到异常

我无法理解这一点,这让我很困惑,谁能帮忙,谢谢。

【问题讨论】:

  • 您是否尝试过在控制台中将有效值传递给您的助手。它有效吗?
  • 是的,有效值有效,无效值抛出异常,但在网页上有效,我的意思是它显示了创建新记录的路径
  • 你在网页上是什么意思...不管代码在哪里执行...如果它有有效值,它会工作,否则它会中断。
  • 网页意味着当我在浏览器中加载页面时,如果客户 ID 为 nil,它会向我显示创建新客户的路径,但在控制台中却没有,它会中断并引发异常
  • store_customer_path 应该是有效的,无论你传递什么值......所以只要 store_customer_path 是有效的,它应该可以工作。你能分享你的 routes.rb 代码。 ?

标签: ruby-on-rails ruby-on-rails-3 routes


【解决方案1】:

通过您的routes.rb 后,我看不到任何路由到store_customer_path 的相关路径...请使用当前的路径或创建新路径...通过运行@987654324 进行验证@ 然后在path.txt 中轻松检查您的路线

=============更新答案==============

这里你传递了两个值,你只需要传递一个

而不是helper.link_to customer_email, app.store_customer_path(store,order.customer_id) 试试

helper.link_to customer_email, app.store_customer_path(order.customer_id)

helper.link_to customer_email, app.store_customer_path(store.id)

正如你的路径所说的 /stores/:store_id/customers/new(.:format),你只需要传递 store_id 就可以了。

为了了解 Routes 从 Rails 2 到 Rails 3 的主要变化...你必须看看这个page

【讨论】:

  • 您好,我已验证该路径存在
  • 这是我尝试在控制台上查看命名路径时看到的。 /stores/:store_id/customers/new(.:format)
  • 您好,我面临的问题是我无法理解为什么在 rails 2.3 而不是 rails 3.1 的浏览器上加载相同的东西时会起作用
  • 嗯...有很多东西在 rails2 中有效,在 rails3 中无效,因为引入了许多更改,甚至包括路由...所以你必须使用兼容的代码而不是使用的那个在 rails2 .....
猜你喜欢
  • 2011-02-20
  • 2012-01-28
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多