Acts_as_tree - один ко многим:Показывать записи, связанные с дочерними элементами, на родительской странице

StackOverflow https://stackoverflow.com/questions/1688830

Вопрос

У меня относительно простое отношение "один ко многим", и я использую acts_as_tree, чтобы упорядочить его в представлении.Это выглядит примерно так:

Корень

  |_Product 1
  |_Product 2
  |_Category 1.1

        |_Product 3
        |_Product 4
        |_Category 1.1.1

               |_Product 5

Способ, которым я это настраиваю, заключается в том, что я перечисляю товары в действии "показать" категории.Однако, кажется, я не слишком понимаю, как показать:Товар 1-5 на "выставке" для категории 1, Товар 3-5 в категории 1.1 и так далее...

У кого-нибудь есть подсказка, откуда я могу это взять?

Спасибо!Вэл

Это было полезно?

Решение

Вы также можете ознакомиться с недавним родословная gem предназначен для высокой производительности, когда нужно получить всех потомков в одном SQL-запросе.

Другие советы

Если вы используете awesome_nested_set (рекомендуется, я делаю), то вы можете сделать это:

Если Товар принадлежит к Категории:

class Category < ActiveRecord::Base
    def products_in_tree
        Product.all(:joins => :category, :conditions => ['categories.lft >= ? and categories.rgt <= ?', left, right])
    end
end

Если товар имеет категорию_and_belongs_to_many (или has_many :через), измените :join на :categories.

Вам нужно использовать вложенный набор, если вы хотите решить эту проблему с приемлемой производительностью (то есть избежать множества отдельных обращений к базе данных для составления списка).

Rails раньше имели встроенные acts _ as _ nested_set, а объяснение того, как это работает все еще очень хорош и вполне действителен.Сегодня вы должны использовать это как плагин.

Однако плагин Rails по умолчанию не очень хорош, именно поэтому было создано несколько других плагинов.Я буду рекомендовать вам использовать Потрясающий Вложенный Набор, который я использовал сам с удовлетворительными результатами.

Вложенные наборы могут быть немного сложными для понимания, но, надеюсь, первая ссылка и другие readme объяснят вам это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top