Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails路由-路径问题_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails rails路由-路径问题

Ruby on rails rails路由-路径问题,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我一直在琢磨这个问题,但我一直在犯这个错误 没有路由匹配{:action=>“show”,:category_id=>nil, :controller=>products,:id=>nil}缺少所需的键: [:category_id,:id] 在我简单的逻辑中,每当我选择category_product_path并传入category时,我都应该拥有该类别中的产品列表。但我可能错过了什么。这是我的视图文件。。。在那里我尝试了一些东西却没有成功 <% @products.each do |p

我一直在琢磨这个问题,但我一直在犯这个错误

没有路由匹配{:action=>“show”,:category_id=>nil, :controller=>products,:id=>nil}缺少所需的键: [:category_id,:id]

在我简单的逻辑中,每当我选择category_product_path并传入category时,我都应该拥有该类别中的产品列表。但我可能错过了什么。这是我的视图文件。。。在那里我尝试了一些东西却没有成功

<% @products.each do |product| %>
    <tr>
        <td><%= link_to product.name, category_product_path(@category) %></td>
        <td><%= product.category_id %></td>
        <td><%= number_to_euro(product.price) %></td>
        <td><%= product.stock %></td>
        <td><%= image_tag(product.image.thumb) %></td>
        <br>
        </tr>
<% end %>
我认为问题出在控制器的某个地方(不是管理文件夹中的那些)

class CategoriesController
对于嵌套资源路由,您必须传递类别和产品的ID/对象:

<%= link_to product.name, category_product_path([product.category_id, product.id]) %>

您需要将
@category
产品
变量添加到您的路线:

<%= link_to product.name, category_product_path(@category, product) %>
如果您没有这样做,它确实表明您的
@category
值不存在。要对此进行测试,请手动插入
@category
值:

<%= link_to product.name, category_product_path("2", product) %>

category\u products\u path(category\u id:@category)
注意,
products
的复数形式。但是链接到索引仍然没有多大意义。我想你要找的是
链接到product.name,category\u product\u路径(category\u id:product.category,id:product)
嘿。第一个不起作用,给出了相同的错误,但是第二个像一个符咒一样起作用。非常感谢。是的,这没有多大意义,我还在学习。我真正想做的是转到分类页面,从中选择产品类别并列出它们。所以从某种意义上说,这就是指数。。。或者,如果您愿意,它可能只是一个“过滤器”页面:)。哦,我有一个问题,你能给我解释一下“category\u id:product.category,id:product”这一部分吗?它不清楚,而且我在rails文档中找不到关于多个参数路径的任何内容。嗯,我学到了一些新东西,我需要将它们都传递。但是这个解决方案带来了错误-没有路由匹配{:action=>“show”,:category_id=>[1,2],:controller=>“products”,:id=>nil}缺少所需的键:[:id]谢谢你的提示,我需要阅读更多关于这个(路由)的信息并将其整合起来。但是,提供的解决方案导致“没有路由匹配{:action=>“show”,:category_id=>nil,:controller=>“products”,:id=>“2”}缺少必需的键:[:category_id]'。这对我来说越来越不清楚了,zwippie发布了一些类似的东西,我得到了一个事实,那就是两者都需要通过。但是如果@category不起作用=>并且我假设这是主要原因,可能是我需要在products\u控制器中定义它吗?就像我在分类中定义的产品一样?这是我最初的想法,就是这样!!!哈,我想我的想法是对的,但就是不知道如何把它付诸实践。。。非常感谢。然而,有一个问题,马克斯早些时候说了一些。在普通应用程序中,您很少看到产品索引,通常会看到基于类别的产品。在这种情况下,为函数/视图选择不同的名称是否合乎逻辑?喜欢类别列表还是什么?不,你做得很好-你会看到url
http://url.com/categories/1/products
这在我看来是合乎逻辑的
<%= link_to product.name, category_product_path(@category, product) %>
#app/controllers/products_controller.rb
class ProductsController < ApplicationController
   def index
      @category = Category.find params[:category_id]
      @products = @category.products
   end
end 
<%= link_to product.name, category_product_path("2", product) %>
#config/routes.rb
namespace :admin do
  #needs a root
  resources :categories, :products, :orders
end
resources :categories, only: [:index, :show] do
  resources :products, only: [:index, :show]
end
resources :orders, only: [:new, :create]