我正在创建一个rails电子商务网站。我可以通过搜索表单按标题搜索产品,但如何链接到输出具有特定标题或类别的所有产品的页面?
这是我的产品控制器中的代码:
def index
@products = Product.scoped
@products = @products.where('title like ?', "%#{params[:search]}%") if params[:search]
@products
end
我的商店控制器有这个:
def index
if params[:search]
@products = Product.search(params[:search]).title
else
@products= Product.all
end
end
答案 0 :(得分:0)
要创建显示视图中使用some
类别的产品的链接:
<%= link_to 'Some', products_path(cat: :some) %>
您需要将控制器更改为:
@products = @products.where('title like ?', "%#{params[:search]}%") if params[:search]
@products = @products.where('category like ?', "%#{params[:cat]}%") if params[:cat]
我假设的东西太多了。
答案 1 :(得分:0)
如果您想根据标题或类别过滤产品,则执行此操作的方式很大程度上取决于您在视图中设置过滤的方式。如果您使用的是具有要过滤的特定标题的选择框,则在您的视图中(在表单标记内)它将如下所示:
<select name='title_filter'>
<option value="title_1">Title 1</option>
<option value="title_2">Title 2</option>
</select>
现在,当用户提交选择了标题的表单时,键“title_filter”将添加到您的params散列中,其中包含用户选择的值。您可以使用您指定的相同控制器操作,但只需检查新密钥:
if params[:title_filter]
@products = @products.where('title= ?', params[:title_filter])
else
# fallback if no title is selected
end
或者,如果您使用链接进行过滤,则可以使用link_to:
<%= link_to 'My Title', products_path(title: :my_title) %>
此外,您使用where
子句的方式也很危险。请参阅Active Record guide
答案 2 :(得分:0)
我最终在我的观点中使用了这个。出于某种原因,其他答案对我不起作用:&lt;%= link_to“Tables”,products_path(search:'dining')%&gt;