Я столкнулся со следующей проблемой: в своем приложении я использую движки. Допустим, у меня есть магазинный движок. В этом движке магазина у меня есть два контроллера: carts_controller и products_controller и их помощники: carts_helper и products_helper.
Теперь в моем views/shop/products/index.html.erb
представлении я пытаюсь вызвать метод cart_action, который определен в helpers/shop/carts_helper.rb
. Однако, к сожалению, я получаю undefined method `cart_action' for #<#<Class:0x007fb3627af090>:0x007fb3627aab08>
, когда это делаю. Когда я помещаю тот же метод в helpers/shop/products_helper.rb
, я не получаю это сообщение, и метод работает нормально .... Почему я не могу использовать метод из carts_helper, но могу ли я использовать метод из products_helper? В обычном приложении rails я могу использовать любой вспомогательный метод для любого представления, верно?
Возможно, придется что-то делать с пространством имен, т.е. вспомогательные файлы находятся не в helpers
, а в helpers/shop
, однако это помогает предотвратить конфликты с помощниками из других движков или приложений ...
module Shop
module CartsHelper
def cart_action(package_id)
#some code
end
end
end
Как я это называю на shop/products/index.html.erb
:
<%= cart_action(package['id']) %>
Может ли это быть связано с тем, что я унаследовал функциональность своего application_controller от своего основного приложения ?:
class Shop::ApplicationController < ApplicationController
end
вместо
module Shop
class ApplicationController < ActionController::Base
end
end
FWIW мои маршруты для этого движка выглядят так:
Shop::Engine.routes.draw do
resources :products, only: [:index]
# shopping cart
resource :cart, only: [:show] do
put 'add/:package_id', to: 'carts#add', as: :add_to
put 'remove/:package_id', to: 'carts#remove', as: :remove_from
end
end
Спасибо за любую помощь заранее!
Примечание. Я не хочу использовать свой вспомогательный метод в основном приложении, а просто в другом представлении того же движка.