ray Tôi đã có 3 ứng dụng với các mô hình:Làm thế nào để sử dụng các thuộc tính đa giá trị (MVA) và các khía cạnh với nhau trong tư duy nhân sư?
class Event < ActiveRecord::Base
has_many :event_categories
has_many :categories, through: :event_categories
end
class EventCategory < ActiveRecord::Base
belongs_to :category
belongs_to :event
end
class Category < ActiveRecord::Base
belongs_to :parent, class_name: 'Category'
has_many :subcategories, class_name: 'Category', foreign_key: :parent_id
end
tôi cần phải lọc các sự kiện theo thể loại và đưa ra cây loại với số lượng:
Music Festivals (10) # id: 1
-- Classic (2) # id: 3
-- Pop (8) # id: 8
IT Conferences (2) # id: 10
-- Ruby (1) # id: 11
-- PHP (1) # id: 12
...
Tôi cố gắng để làm như thế này:
define_index do
has category_values, type: :multi, facet: true
end
before_save :collect_category_values
def collect_category_values
# traversing events categories
# putting string like '10/1/3' to self.category_values
# which contains all event's categories and subcategories
end
Mã này tạo ra kết quả tìm kiếm thú vị nhưng số lượng khía cạnh rất buồn:
{ :category_values => { '1/3' => 2, '10/11' => 1 } }
Thay vì:
{ :category_values => { 1 => 10, 3 => 2, 10 => 2, 11 => 1 }
Và phần hài hước bắt đầu khi tôi quyết định thay đổi chỉ số, nhưng quên để xây dựng lại nó:
# old attribute --> has category_values, type: :multi, facet: true
has categories(:id), as: :category_id, type: :multi facet: true
Đây là một bẩn hack: Sphinx bắt đầu sử dụng cũ truy vấn chỉ mục với logic mô hình mới. Đếm và kết quả tìm kiếm rất tuyệt. Nhưng, tất nhiên, nếu chúng ta sẽ cố gắng xây dựng lại các chỉ mục, triển khai hoặc smth, sau đó đếm sẽ bị phá vỡ một lần nữa.
Câu hỏi đặt ra là: làm thế nào để sử dụng MVA với khía cạnh nhau?
Tìm thấy câu hỏi từ '09, với cùng một vấn đề: http://www.mailinglistarchive.com/[email protected]/msg00473.html http://groups.google.com/group/thinking-sphinx/browse_thread/thread/e06cfab6aad327d2
Cảm ơn bạn.
Lưu ý rằng [câu trả lời liên kết chỉ] (http://meta.stackoverflow.com/tags/link-only-answers/info) không được khuyến khích, SO câu trả lời phải là điểm kết thúc của một tìm kiếm một giải pháp (so với một điểm dừng khác của tài liệu tham khảo, mà có xu hướng để có được cũ theo thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu. – kleopatra