没有路由匹配 rails 5

no route match rails 5

我正在尝试将路由添加到我的 rails 应用程序,但每次我尝试加载索引页面时,它 returns 都没有路由匹配。 我的

product.rb

belongs_to :category
extend FriendlyId
friendly_id :name, use: [:slugged, :finders]
 default_scope { where(active: true) }
end

这是我的 category.rb

has_many :products
  extend FriendlyId
 friendly_id :name, use: [:slugged, :finders]

我的路线是这样设置的

    resources :categories
    get '/products/:category_id/:id/', to: 'products#show', as: 'product'
    resources :products

在我的索引页中我有这样的

<%= link_to product, class: "card" do %>
<div class="product-image">
<%= image_tag product.productpic.url if product.productpic? %>
    </div>

      <div class="product-text">
        <h2 class="product-title"> <%= product.name %></h2>
          <h3 class="product-price">£<%= product.price %></h3>
      </div>

        <% end %>
    <% end %>

但是每当我在我的兄弟中加载页面时,我得到

No route matches {:action=>"show", :category_id=>#<Product id: 4, name: "virgin hair", price: #<BigDecimal:7fd0af3ffb10,'0.3E3',9(18)>, created_at: "2016-07-19 12:34:34", updated_at: "2016-07-19 12:41:36", slug: "virgin-hair", productpic: "longhair.jpg", pdescription: "this a brazilian virgin hair", active: true, category_id: 2>, :controller=>"products"} missing required keys: [:id]

我是新手,我做错了什么

您正在传递 product 对象来代替 category_id。 试试这个,

 :category_id => product.category_id

您要执行的操作称为 nested routing

这就是正确的方法:

# config/routes.rb
resources :categories do
  resources :products
end

在你的控制器中:

# app/controllers/products_controller.rb
...
  def show
    @category = Category.find(params[:category_id])
    @product = @category.products.find(params[:id])
  end
...

在您看来(link 上述控制器操作):

<%= link_to 'Awesome Product!', category_product_path(@category, @product) %>

像上面那样定义路由会让你创建这样的路径:

/categories/123/products/1

编辑

要使用该名称查找记录,您可以在控制器中执行如下操作:

# app/controllers/products_controller.rb
...
  def show
    @category = Category.find_by!(name: params[:category_id])
    @product = @category.products.find_by!(name: params[:id])
  end
...