没有路由匹配 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
...
我正在尝试将路由添加到我的 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
...