创建一个Rails'产品页面

时间:2014-11-08 18:47:10

标签: ruby-on-rails ruby search hyperlink product

我正在创建一个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

3 个答案:

答案 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;