未定义的方法`product_bids_path'

时间:2015-12-19 08:47:43

标签: ruby-on-rails ruby-on-rails-4

我关注此tutorial, 当我想展示我的产品时,我收到了这个错误:

NSNumber *indexNumber=auxDict[targetId];
int index=[indexNumber intValue];
CustomObject *object=myArray[index];

在我的路线文件中:

undefined method `product_bids_path'
devise_for :users resources :products do resources :auctions, only: [:create] do resources :bids, only: [:create] end end

中的

products/show.html.erb

这是我的出价部分:

=render "auction"
=render "bid"

= form_for [ @product, @product.auction, Bid.new] do |f| 帮助器中需要发送form_for网址请求,但发送product_auction_bids_path网址请求。

我应该如何编写向product_bids_path

发送请求的正确form_for帮助程序

1 个答案:

答案 0 :(得分:1)

似乎评论解决了它;

为了读者的利益,如果您有一组嵌套的路由(如下所示),您必须确保使用 all 调用依赖对象的路径:

resources :products do
    resources :auctions, only: [:create] do
      resources :bids, only: [:create]
    end
end

products_auctions_bids_path(@product, @auction, @bid)

现在

关于这一点有一个重点 - docs状态,你不应该将路线嵌套到一个以上的水平:

  

资源不应该嵌套超过1级。

您确实需要确保能够根据比所有三种嵌套资源中primary key更少的唯一信息来调用路由。

我知道你并没有打电话给个别路径(只有create),但是像你正在做的那样把它全部嵌套仍然是一个糟糕的模式。

有几种方法可以解决这个问题;我个人只会使用auctionbid

#config/routes.rb
resources :auctions, only: :create do
   resources :bids
end
无论如何,

Auctions应该基于主键唯一...

#app/models/auction.rb
class Auction < ActiveRecord::Base
   belongs_to :auction
   has_many :bids
end

#app/models/bid.rb
class Bid < ActiveRecord::Base
   belongs_to :auction
end

这将允许您专门识别拍卖,然后根据需要创建出价。