将模型对象的名称映射到 Rails 5.1 中的 pg_search 查询参数
Map name of model object to a pg_search query param in Rails 5.1
我有一个 album
模型,它有一个 'cover_image' 和 has_many 'images'。我还有一个 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 %>
...
问题是您将 @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
我有一个 album
模型,它有一个 'cover_image' 和 has_many 'images'。我还有一个 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 %>
...
问题是您将 @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