【问题标题】:How to show unique strings in Rails?如何在 Rails 中显示唯一的字符串?
【发布时间】:2018-01-30 22:11:00
【问题描述】:

我想在我的列表页面中按字母对公司进行分类。 但是有多个记录以相同的字母开头。我可以使用.first 方法获取公司名称的首字母。

但我的代码显示重复的字母。

控制器:

 @brand = Brand.where(slug: params[:brand]).first
 @companies = Company.where(brand_id: @brand.id)....

查看:

 <% @companies.each do |c| %>
       <li>
         <%= link_to company_path(c.brand.name,c.id) do  %>
            <%= c.name.first %>
         <% end  %>
       </li>
   <% end %>

如何只显示唯一字母?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5


    【解决方案1】:

    新代码(有一些变化,假设公司属于_to 品牌和品牌有_many 公司)

    @brand = Brand.where(slug: params[:brand]).first
    @companies = @brand.companies
    #@list is a hash with letters as keys and an array of companies starting with this letter
    @list = Hash.new { |h,k| h[k]=[] } 
    @companies.each { |comp| @list[comp.name[0]] << comp }
    
    #As “engineersmnky” suggested on a comment the last two sentences can be simplified:
    @list = @companies.group_by { |c| c.name[0] }
    

    查看:

    <% @list.each do |letter, companies| %>
      <h2><%= letter %><h2>
      <% companies.each do |c| %>     
        <li>
          <%= link_to c.name, c %>
        </li>
      <% end %>
    <% end %>
    

    【讨论】:

    • @list = @companies.group_by {|c| c.name[0]} 在我看来更简洁一些,并且提供了相同的功能。
    【解决方案2】:

    您正在遍历所有公司,因此如果您有Facebook 和Foxtel 之类的公司,则将复制带有F 标签的链接。你可以做类似的事情

    categories = @companies.where(brand_id: @brand.id).pluck(:name).map(&:first).uniq
    

    在上面的代码中,它所做的只是获取公司名称列表并提取第一个字母并删除重复项。

    现在您可以遍历类别并为该类别创建一个链接,在类别页面内您可以从该字母开始获取公司

    Company.where('name LIKE ?', "%#{starting_character}%")
    

    starting_character 从类别列表页面发送。

    【讨论】:

    • 但使用此代码我无法链接我的关联表:&lt;%= link_to company_path(c.brand.name,c.id) do %&gt; 这里c.brand.name
    • @YalınSemer 您需要在每个类别页面中执行此操作,您可以迭代从Company.where('name LIKE ?', "%#{starting_character}%") 获得的结果并执行@companies.each do ... link_to company_path(company.id)
    猜你喜欢
    • 2012-12-01
    • 2016-05-14
    • 2023-01-19
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多