【问题标题】:Creating a Rails' product page创建 Rails 的产品页面
【发布时间】:2014-11-08 18:47:09
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    要创建一个链接,在您的视图中显示使用 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]
    

    我假设的事情太多了。

    【讨论】:

      【解决方案2】:

      如果您想根据标题或类别过滤您的产品,您执行此操作的方式很大程度上取决于您在视图中的过滤设置方式。如果您使用的选择框包含您想要过滤的特定标题,它在您的视图中(在表单标签内)看起来像这样:

      <select name='title_filter'> 
        <option value="title_1">Title 1</option>
        <option value="title_2">Title 2</option>
      </select>
      

      现在,当用户提交选择了标题的表单时,键“title_filter”将与用户选择的值一起添加到您的参数哈希中。您可以使用您指定的相同控制器操作,但只需让它检查您的新密钥:

      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

      【讨论】:

        【解决方案3】:

        在我看来,我最终使用了这个。由于某种原因,其他答案对我不起作用:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-09-17
          • 2019-12-28
          • 1970-01-01
          • 1970-01-01
          • 2019-07-14
          • 2021-01-24
          • 1970-01-01
          相关资源
          最近更新 更多