我在调试这个错误时遇到了麻烦。#ActiveRecord::Relation的索引未定义方法'id'
这是我的产品控制器:
class ProductsController < ApplicationController
def index
if params[:query].present?
@products = Product.search_by_name_and_category(params[:query])
else
@products = Product.all
end
end
def new
@product = Product.new
@product.user = current_user
end
def show
@product = Product.find(params[:id])
end
end
这是我的产品模型:
class Product < ApplicationRecord
belongs_to :user
has_many :bookings
validates :name, presence: true
validates :category, presence: true
has_one_attached :photo
include PgSearch::Model
pg_search_scope :search_by_name_and_category,
against: [ :name, :category ],
using: {
tsearch: { prefix: true } # <-- now `superman batm` will return something!
}
end
这是我的产品卡部分。
<div class="card-product-container">
<div class="cards">
<div class="card-product">
<%= link_to product_path(@products.id) do %>
<img src="https://source.unsplash.com/random/?<%= product.name %>" />
<div class="card-product-footer">
<div>
<h2><%= product.name %></h2>
<p><%= product.category %></p>
</div>
<h2><%= product.price %></h2>
</div>
<% end %>
</div>
</div>
@products是一个多个产品的列表。这个列表没有ID。列表中的每个产品都有。
您需要的是@products中每个单独Product的ID。
迭代@products和使用一个单一的产品。
<% @products.each do |product| %>
<div class="card-product">
<%= link_to product_path(product.id) do %>
<img src="https://source.unsplash.com/random/?<%= product.name %>" />
<% end %>
<div class="card-product-footer">
<div>
<h2><%= product.name %></h2>
<p><%= product.category %></p>
</div>
<h2><%= product.price %></h2>
</div>
</div>
<% end %>