我有一个album
模型,有一个'cover_image'和has_many'图像'。我也有一个product
模型。我正在使用pg_search过滤我的产品。
独立地,他们都完美无瑕地工作。我想要做的是根据pg_search过滤器参数显示相册cover_image
。
例如:如果我有一个名为“limestone”的过滤器参数,我会创建一个名为“limestone”的相册,当用户按石灰石过滤页面时,他们会获得产品结果以及匹配的cover_image。
product_controller - 这适用于过滤
def index
@products = if params[:query]
Product.search_for(params[:query])
else
Product.order(:name)
end
end
product_controller - 这会破坏页面 我尝试这样做是为了保持简单并过滤模型中的图像
def index
@products = if params[:query]
Product.search_for(params[:query])
*@albums = Album.where(name:(params[:query]))*
else
Product.order(:name)
end
end
products / index.html.erb 然后我会正常调用album
。
...
<% @albums.each do |a| %>
<%= image_tag("#{a.cover_image_url(:original)}") %>
<% end %>
...
答案 0 :(得分:1)
问题是您要将@albums
分配给@products
。这实际上就是你正在做的事情:
@products = @albums = Album.where(name: (params[:query]))
因为if语句正在返回@albums
。所以这应该工作(假设你的其余逻辑是正确的):
def index
@products = if params[:query]
@albums = Album.where(name: params[:query])
Product.search_for(params[:query])
else
Product.order(:name)
end
end
但是,我现在不会将@albums指定给你这样做的地方。我认为这更清楚,因此稍微更好:
def index
if params[:query]
@products = Product.search_for(params[:query])
@albums = Album.where(name: params[:query])
else
@products = Product.order(:name)
@albums = []
end
end