【问题标题】:Rails 5 order(:name) of has many associationRails 5 order(:name) 有很多关联
【发布时间】:2019-07-12 15:18:10
【问题描述】:

我有两个模型,productvariation 产品有_许多变体和变体属于_to 产品。我在我的模板中显示产品的变体,但似乎无法让 order(:name)variation 关联 - 下面的控制器代码想要订购产品名称。

products_controller.rb

...
@products = Product.order(:name)
...

product.html.erb

...
<% @products.each do |product| %>
  <div class="grid-filter">
   <% product.variations.each do |v| %>
     <span class="copy">
       <%= v.name %>
     </span>
   <% end %>
  </div>
<% end %>
...

【问题讨论】:

  • 我不确定我是否理解你的问题。您是否尝试显示按名称排序的产品,以及按名称排序的每个产品的变体?

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


【解决方案1】:

如果您想根据变体名称对产品进行排序,您可以尝试在产品模型中的关联本身上添加顺序,如下所示:

class Product
 has_many :variations, -> {order 'name'}
end

【讨论】:

    【解决方案2】:

    您可以在视图中使用顺序,因为“变体”也是关联

        ...
    <% @products.each do |product| %>
      <div class="grid-filter">
       <% product.variations.order(:name).each do |v| %>
         <span class="copy">
           <%= v.name %>
         </span>
       <% end %>
      </div>
    <% end %>
    ...
    

    【讨论】:

      【解决方案3】:

      您可以在控制器中订购它:

      ...
      @products = Product.order(:name)
                         .includes(:variants)
                         .order('variants.name')
      ...
      

      【讨论】:

      • 我认为结果将是按 variant.name 订购的产品。对吗?
      • 这段代码完成了他正在寻找的技巧:它将按产品名称排序,并且对于每个产品,它还将显示按名称排序的变体。
      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多