Ruby on rails ActiveRecord::RecordNotFound-没有ID的产品

Ruby on rails ActiveRecord::RecordNotFound-没有ID的产品,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我正在尝试在我的应用程序中创建评论,但在控制器中执行以下操作时: def create @product = Product.find(params[:product_id]) @review = @product.reviews.create(params[:review]) redirect_to product_path(product) end 我得到无法找到没有ID的产品。我填写了表格,当它执行下面的一行时,它似乎找不到该产品。@product=produ

我正在尝试在我的应用程序中创建评论,但在控制器中执行以下操作时:

def create
    @product = Product.find(params[:product_id])
    @review = @product.reviews.create(params[:review])

   redirect_to product_path(product)
  end
我得到
无法找到没有ID的产品
。我填写了表格,当它执行下面的一行时,它似乎找不到该产品。
@product=product.find(params[:product_id])

路线

 resources :products do
    resource :reviews
  end
products/show.html.erb

 <%= form_for(@product.reviews.build) do |f| %>
   <div class="field">
     <%= f.label :title %>
     <br/>
     <%= f.text_field :title %>
   </div>
   <div class="field">
     <%= f.label :author %>
     <br/>
     <%= f.text_field :author %>
   </div>
   <div class="field">
     <%= f.label :content %>
     <br/>
     <%= f.text_area :content %>
   </div>
   <div class="field">
     <%= f.label :rating %>
     <br/>
     <%= f.number_field :rating %>
   </div
   <div class="actions">
     <%= f.submit %>
   </div>
  <% end %>






将您的表格更改为

form_for [@product, @product.reviews.build] do |f|

这会将操作更改为
/products/@product.id/reviews
以匹配嵌套路线

您可以发布参数吗?我相信你的
params
方法没有:product\u id键。我以前尝试过这个,并将我的表单设置为如下:
但是得到了
未定义的局部变量或方法“product”
,它指向我的review\u控制器的创建方法。我相信问题在于我的
review\u控制器中有它是否表示产品未定义?是否重试?您的问题是
params[:product\u id]
为零,因此引发了一个异常,即在没有id的情况下找不到产品。我假设,由于您处于产品的显示操作中,
@product
已经是一个持久化对象,因此这将解决您的问题。如果在尝试此解决方案时遇到不同的错误,请将该错误添加到问题中。我忘了提到控制器代码在
查看\u controller
中。是的,我再试了一次,我知道。该表单应转到reviews控制器的创建操作。