【问题标题】:Filtering products in Index of Categories & Products by Product's attribute按产品属性过滤类别和产品索引中的产品
【发布时间】:2013-07-17 08:41:03
【问题描述】:

产品.rb

class Product < ActiveRecord::Base

has_many :categories, through: :product_categories
has_many :product_categories, dependent: :destroy

类别.rb

class Category < ActiveRecord::Base
  attr_accessible :name

  # accepts_nested_attributes_for :product_categories

  has_many :products, through: :product_categories
  has_many :product_categories, dependent: :destroy

  default_scope :order => 'id'
end

static_pages_controller.rb

...

def catalog
  @categories = Category.all

  render layout: "catalog"
end

我的观点:

// uses tabbable navigation from bootstrap to iterate over the categories, then it iterates over each product and inserts them into .tab-content

    .row-fluid
      .span8.offset2
        .tabbable
          %ul.nav.nav-tabs
            %li.active
              %a{"data-toggle" => "tab", :href => "#tab-#{@categories.first.id}"} #{@categories.first.name}
            - @categories.each do |category|
              -unless category == @categories.first
                %li
                  %a{"data-toggle" => "tab", :href => "#tab-#{category.id}"} #{category.name}
          .tab-content
            .tab-pane.fade.in.active{id: "tab-#{@categories.first.id}"}
              %h3.center #{@categories.first.name}
              %hr
              - if @categories.first.products.count == 0
                .span6.offset3
                  This category is empty.
              -else
                - @categories.first.products.each do |product|
                  = render 'product', :product => product
            - @categories.each do |category|
              -unless category == @categories.first
                .tab-pane.fade{id: "tab-#{category.id}"}
                  %h3.center #{category.name}
                  %hr
                  - if category.products.count == 0
                    .span6.offset3
                      This category is empty.
                  -else
                    - category.products.each do |product|
                      = render 'product', :product => product

目前它显示一个类别中的每个产品。我希望它只显示 :status =>“已发布”的产品。我似乎无法弄清楚如何在控制器中解决这个问题?累了,对 SQL 查询语法不太熟悉。所以请原谅我的无知:P

【问题讨论】:

  • @categories = Category.joins(:products).where('products.status' => "published") -- 我在做什么吗? 我使用这个得到了重复的类别名称。
  • 如果能帮您解决问题,请查看此帖stackoverflow.com/questions/8031317/… 需要按类别分组并在其中显示产品
  • 搞定了,我完成后会发布我所做的事情

标签: ruby-on-rails attributes nested filtering has-many


【解决方案1】:

宝石文件

gem 'squeel'

category.rb

scope :with_published_products, -> { joins{product_categories.product}.where{products.status.eq "published"}.uniq }

static_pages_controller.rb

def catalog
  @categories = Category.with_published_products
end

我的看法

- @categories.each do |category|
  category.name
  category.products.each do |product
    = render 'product', :product => product

希望这对其他人有所帮助... :)

【讨论】:

    猜你喜欢
    • 2015-09-23
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2019-02-12
    • 1970-01-01
    相关资源
    最近更新 更多