我现在开始使用Rails我遇到了一些我无法解决的问题,这是一个例子:
我有一个名为Product的表,其中包含名称,照片等,以及一个名为review的表,其名称和product_id
。每个产品都可以有很多评论,每个评论只有一个产品。当我在索引页面上选择产品时,它会将我引导至“显示”视图,我将此链接放在<%= link_to 'Reviews', review_path(@product)%>
,然后将其重定向到/reviews/1
,它只显示了一条评论,并且我试图从产品1中显示每条评论。
我有以下代码尝试从产品中捕获所有评论。如何仅使用@review
product_id=1
评论放入def show_prod
@review = Review.find(params[:product_id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @review }
end
end
{{1}}
非常感谢,但我仍然得到同样的错误
当你没想到它时,你有一个零对象! 您可能期望一个Array实例。 评估nil.each时发生错误
当我从产品中写下所有评论时,它来自评论索引页面。看起来好像来自控制器的@reviews没有得到任何产品而且对象是nil ..
感谢您的帮助
答案 0 :(得分:1)
首先,创建一个嵌套在routes.rb
产品下的评论资源resources :products do
resources :reviews
end
与产品链接。
link_to "Reviews", product_reviews_path(@product)
然后将评论控制器范围限定在产品中,如下所示:
class ReviewsController < ApplicationController
before_filter :load_product
def index
@reviews = @product.reviews
end
def show
@review = @product.reviews.find(params[:id])
end
protected
def load_product
@product = Product.find(params[:product_id])
end
end
答案 1 :(得分:0)
查看this tutorial on Rails 3 routing,尤其是关于嵌套资源的部分。
我的猜测是,您生成的路径(获取该产品的所有评论列表)将类似于/product/1/reviews