Унаследованные ресурсы и монгоид
-
27-10-2019 - |
Вопрос
У кого -нибудь успешно имел Rails 3, Монгоид а также Унаследованные ресурсы работающий? Есть советы, чтобы это произошло? Я хотел бы использовать обе драгоценные камни.
В настоящее время я сталкиваюсь с:
undefined method `scoped'
По индексным действиям.
Спасибо!
Кстати, обходной путь по вопросу о прицеле - это переопределить коллекцию, например, SO:
class CampaignsController < InheritedResources::Base
def collection
@campaigns ||= end_of_association_chain.paginate(:page => params[:page])
end
end
Но я ищу более целостный подход
Решение
Если вы используете только монгоид, вы должны перезаписать поведение по умолчанию в унаследованных ресурсах. Поведение по умолчанию таково:
Тем не менее, следующее должно сделать свое дело:
module MongoidActions
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
InheritedResources::Base.send :include, MongoidActions
Вы даже можете по умолчанию коллекции в странице на страницах и бесплатно получить страницы.
Другие советы
В качестве альтернативы вы можете исправить монгоид:
module MongoidScoped
def scoped
all
end
end
Mongoid::Finders.send :include, MongoidScoped
Это сделает inherit_resources
Метод работает, как и ожидалось.
Вот что я сделал, чтобы покрыть оба наследства от InheritedResources::Base
и использование inherit_resources
утверждение.
module InheritedResources
module BaseHelpers
def collection
get_collection_ivar || set_collection_ivar(end_of_association_chain.all)
end
end
end
Вы обычно кладете это в инициализатор (я использую config/initializers/mongoid.rb
).
Производит Mongoid 2.0.0.beta.20
а также inherited_resources 1.2.1
дружелюбный.
Очень полезный пост!
Как бы вы сделали это, если бы ваш контроллер не может быть подкрасен от InheritedResource::Base
а скорее вы должны использовать метод класса inherit_resources
, вот так :
class MyController < AlreadyInheritedFromController
inherit_resources
end
Вышеупомянутый патч обезьян, кажется, не работает в этой установке.
Похоже, что ключ может быть InheritedResources::Base.inherit_resources
Но мне неясно правильный способ перезаписать этот метод. Пожалуйста, исправьте, если я нахожусь на неправильном пути здесь.