У меня есть четыре модели в моем приложении, определенные следующим образом
class User < ActiveRecord::Base
has_many :comments
has_many :geographies
has_many :communities, through: :geographies
class Comment < ActiveRecord::Base
belongs_to :user
class Community < ActiveRecord::Base
has_many :geographies
has_many :users
class Geography < ActiveRecord::Base
belongs_to :user
belongs_to :community
Пользователи могут публиковать комментарии, которые связаны с одним или несколькими сообществами через таблицу географии.
Моя задача — отображать только комментарии от сообщества, выбранного из выпадающего списка. Из этого сообщения я узнал, что могу получить доступ к сообщество данного комментария через цепочку объектов comment.user.communities.first
.
Кажется, что обычно named_scope с лямбдой был бы предпочтительным выбором для фильтрации списка всех комментариев, однако я совершенно не понимаю, как построить этот named_scope. Я пытался построить named_scope, следуя некоторым RailsCast, но это все, что я смог сделать. Сгенерированная ошибка ниже.
class Comment < ActiveRecord::Base
belongs_to :user
def self.community_search(community_id)
if community_id
c = user.communities.first
where('c.id = ?', community_id)
else
scoped
end
end
named_scope :from_community, { |*args| { community_search(args.first) } }
Это ошибка:
syntax error, unexpected '}', expecting tASSOC
named_scope :from_community, lambda { |*args| { community_search(args.first) } }
^
Каков правильный синтаксис для передачи метода с аргументами в named_scope?