Rails中的链接路径

时间:2011-12-01 21:40:57

标签: ruby-on-rails path

我现在开始使用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 ..

感谢您的帮助

2 个答案:

答案 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