【问题标题】:Rails path helper generate dot or undefined method instead of slashRails 路径助手生成点或未定义的方法而不是斜线
【发布时间】:2014-06-09 12:05:23
【问题描述】:

路由定义如下

 resources :purchases do
    collection do
       put :wirecardtest
    end
  end

控制器操作以下列方式之一重定向并生成相关错误

format.html { redirect_to wirecardtest_purchase_path(@purchase)

未定义的方法`wirecardtest_purchase_path'

format.html { redirect_to wirecardtest_purchases_path(@purchase)

/purchases/wirecardtest.44

查看代码时的行为是相同的。
资源以复数模式定义,因为它应该是。重定向,因为它应该调用特定的资源,所以应该调用单数模型动作模式(复数形式会生成句点)。
我不明白我是怎么进入这个该死的如果你做,该死的如果你不做的位置。

wirecardtest_purchases PUT    /purchases/wirecardtest(.:format)              purchases#wirecardtest

【问题讨论】:

  • 你能发布'rake routes'输出吗?
  • 谢谢..检查答案

标签: ruby-on-rails-3 path


【解决方案1】:

那是您的错误.. 路径生成为'wirecardtest_purchases',但您使用的是'wirecardtest_purchase',请注意缺少的“s”来复数“purchase”。

记住它是一个集合。所以path方法是用rails复数的。

如果有疑问,耙路线:)

---更新---

改进答案(检查 cmets)。如果要对单个对象进行操作,则需要将路由实际定义为 :member 而不是 :collection 。参考Rails Docs,

resources ::purchases do
  member do
    get 'wirecardtest'
  end
end

【讨论】:

  • 我只想显示一次购买。我的理解是,rails 资源允许调用给定类的一个或所有对象。还是“收藏”会修改它?
  • 要作用于单个对象,你应该定义一个 :member 而不是一个 :collection,就像控制器中的 'show' 动作。见guides.rubyonrails.org/routing.html#adding-more-restful-actions
  • 啊……就是这样!但是我会编辑您的答案以显示正确的路线定义,因为这可以解决问题。
  • 谢谢。我被指南的“单一资源”部分挂断了。这对我来说澄清了很多事情!赞成。
  • 很高兴能帮上忙!我们都曾在某个时间点去过那里。并且总是欢迎加分:):P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 2016-09-25
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多