我正在尝试将路由添加到我的rails应用程序,但每次我尝试加载索引页面时都不返回路由匹配。 我的
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]
我在这里做错了什么,因为我是新手
答案 0 :(得分:1)
您正在传递产品对象来代替category_id。 试试这个,
:category_id => product.category_id
答案 1 :(得分:0)
您尝试做的事情称为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_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
...