Как запросить коллекцию через несколько ассоциаций? - PullRequest
0 голосов
/ 22 апреля 2019

Мне нужно собрать объекты, которые все связаны через несколько уровней ассоциаций, и я не знаю, кому это нужно.

Мне нужно получить коллекцию CustomText на основе параметра запроса строки.

В основном мне нужно сделать запрос, который будет тянуть коллекцию CustomText по имени:

@searched_content = params[:search].downcase
@query = CustomText.where("lower(name) like ?", "%#{@searched_content}%")

, но затем также фильтрует @query для поиска только LineItems, которые были частью утвержденного заказа. Я использую Шпрее, где Spree::Order has_many Spree::LineItem. По сути, делать что-то подобное (совсем не работает, но, надеюсь, вы сможете увидеть, что я пытаюсь сделать):

@query = Spree::LineItem.joins(:order).where(spree_orders: {state: "complete"}).joins(:custom_texts).where("lower(name) like ?", "%#{@searched_content}%"))

Модель:

class CustomText < ActiveRecord::Base
   belongs_to :custom_set, :inverse_of => :custom_texts
end

class CustomSet < ActiveRecord::Base
   belongs_to :spree_line_item, :class_name => Spree::LineItem, :foreign_key => :spree_line_item_id
   has_may :custom_texts, :dependent => :destroy, :inverse_of => :custom_set
end

class LineItem < ActiveRecord::Base
   has_many :custom_texts, :through => :custom_sets
   has_many :custom_sets, :dependent => :destroy, :foreign_key => :spree_line_item_id
end

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 22 апреля 2019

Ну, это была простая синтаксическая ошибка с одной слишком большой конечной скобкой в ​​конце ... глупая орфографическая ошибка.

@query = Spree::LineItem.joins(:order).where(spree_orders: {state: "complete"}).joins(:custom_texts).where("lower(name) like ?", "%#{@searched_content}%")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...