我想從使用friendly_id的資源路由到嵌套資源。下面是代碼:Rails - 使用friendly_id slug和嵌套資源路由錯誤
routes.rb中:
resources :products do
resources :reviews, except: [:index]
end
耙路線:
new_product_review GET /products/:product_id/reviews/new(.:format)
控制器:
:具體產品頁面上@review = Review.new(product_id: params[:product_id])
視圖按鈕
<%= link_to(raw("<button>Write a Review</button>"), new_product_review_path(@review.product_id, @review)) %>
產品網址:
http://localhost:3000/products/light-saber #just kidding
但是,我得到的錯誤:
undefined method `product_id'
我在做什麼錯在這裏?
更新-----
現在在我的控制,我有:
before_filter :setup_product
@review = @product.reviews.new
def setup_product
@product = Product.find(params[:product_id])
end
我雖然還是得到同樣的錯誤。我明確的問題是,因爲我的URL沒有傳入一個整數ID,因爲我使用的是friendly_id,那麼param是如何構造的,以便控制器可以像我想要的那樣檢索產品?
UPDATE:
現在我收到此錯誤:
No route matches {:action=>"new", :controller=>"reviews", :product=>nil}
我得到這個,當我在我的產品頁面更改代碼以:在視圖
<%= link_to(raw("<button>Write a Review</button>"), new_product_review_path(@review)) %>
這是造成問題的確切線?控制器中的一個或路由幫助器中的一個。如果你正在創建一個新的產品評論,它不應該是'new_product_review_path(@product)' – Doon 2013-05-12 00:50:36
不確定 - 我沒有得到一個具體的錯誤行,請看我最新的更新,謝謝你看看! – Zephyr4434 2013-05-12 01:09:28
不會將其更改爲「@ product」,而不是「@ review」。你想爲產品創建評論,你還沒有評論,因此爲零。我更新了我的答案。 – Doon 2013-05-12 01:32:09