Ruby on rails 如何访问Spree';s从main rails应用程序链接到购物车功能
我正在将spree shop构建到一个现有的Rails应用程序中,我需要从spree引擎外部访问Ruby on rails 如何访问Spree';s从main rails应用程序链接到购物车功能,ruby-on-rails,spree,Ruby On Rails,Spree,我正在将spree shop构建到一个现有的Rails应用程序中,我需要从spree引擎外部访问link_to_cart 链接到购物车可在此处找到: 由于我修改了链接到购物车中的样式,我还创建了: #helpers/spree/base_helper_decorator.rb module Spree module BaseHelper def link_to_cart(text = nil) text = text ? h(text) : Spree.t
link_to_cart
链接到购物车
可在此处找到:
由于我修改了链接到购物车中的样式,我还创建了:
#helpers/spree/base_helper_decorator.rb
module Spree
module BaseHelper
def link_to_cart(text = nil)
text = text ? h(text) : Spree.t('cart')
css_class = nil
if simple_current_order.nil? or simple_current_order.item_count.zero?
text = "#{text}: (#{Spree.t('empty')})"
css_class = 'empty'
else
text = "<i class='fa fa-shopping-cart'></i> #{text}: (#{simple_current_order.item_count}) <span class='amount'>#{simple_current_order.display_total.to_html}</span>".html_safe
css_class = 'full'
end
link_to text.html_safe, spree.cart_path, :class => "cart-info #{css_class} btn btn-small btn-success pull-right", style: "margin-left:10px;"
end
end
end
你需要做两件事
创建覆盖
使您的覆盖在主目录中可访问
应用程序
步骤1:我的Spree覆盖位于我的主应用程序的覆盖文件夹中。覆盖应该在您正在装饰的模块上调用module\u eval
#overrides/base_helper_decorator.rb
Spree::BaseHelper.module_eval do
def link_to_cart(text = nil)
#Your customizations here
end
end
步骤2:将下面的一行添加到主应用程序ApplicationController,以访问装饰过的助手
helper_method :link_to_cart # Add only the link_to_cart method
helper 'spree/base' # Add all methods (your decoration plus the default methods)
# from the Spree BaseHelper module to your main app
好的,谢谢本让我走上正轨。以下是我的解决方案:
# class ApplicationController < ActionController::Base
include Spree::Core::ControllerHelpers::Order
include Spree::Core::ControllerHelpers::Auth
helper Spree::BaseHelper
helper Spree::StoreHelper
此外,helper Spree::StoreHelper
似乎不再需要显示购物车按钮和当前订单 您可以将其添加到主应用程序以访问购物车
您还必须在引擎之外的主应用程序中包含正确的帮助程序。在即将发布的3.2.0版spree中,我只需添加:
# class ApplicationController < ActionController::Base
include Spree::Core::ControllerHelpers::Store
include Spree::Core::ControllerHelpers::Order
include Spree::Core::ControllerHelpers::Auth
#class ApplicationController
到我的应用程序控制器,使链接到购物车
在任何地方都能工作。您需要包含多个helper类,因为例如,current\u store
(由其他helper使用)是在Spree::Core::ControllerHelpers::store
中定义的,所以也要添加它以消除任何错误。自从Abram留下答案以来,已经有一些更新。这使我走上了正确的道路,但我有一些打嗝。主要原因是当前货币未定义
application\u controller.rb
class ApplicationController < ActionController::Base
include Spree::Core::ControllerHelpers::Order
include Spree::Core::ControllerHelpers::Auth
include Spree::Core::ControllerHelpers::Store
include Spree::Core::ControllerHelpers::Common
helper Spree::BaseHelper
class ApplicationController
我覆盖了Spree导航栏,并将其用于我的主应用程序
当我添加了include Spree::Core::ControllerHelpers::Common
时,它就开始工作了。不幸的是,这会通过spreespree_application.html.erb
布局呈现所有视图。您可能需要覆盖并修改此视图
此外,所有的css都来自spree。您必须将自定义css移动到spree名称空间并@import.不确定原因,但在完成所有操作后,我仍然得到未定义的局部变量或方法“link\u to\u cart”Hi@Abram,我有同样的问题,但解决方案对我无效。有什么提示吗?啊哈,传说中的stackoverflow答案和你需要的准确答案!您在哪里添加了第二个代码段?我试过订购控制器装饰器,但没有雪茄:(不记得了。试试libHmm不走运。在应用程序中尝试了各种组合,也没有走运。真奇怪。将当前的_order_参数函数添加到应用程序控制器并手动指定当前的_货币现在对我有效!谢谢!这让我走上了正确的轨道。似乎对spree进行了一些更新,所以你必须添加include Spree::Core::ControllerHelpers::Common
。这会改变整个应用程序的呈现方式。
# class ApplicationController < ActionController::Base
include Spree::Core::ControllerHelpers::Store
include Spree::Core::ControllerHelpers::Order
include Spree::Core::ControllerHelpers::Auth
class ApplicationController < ActionController::Base
include Spree::Core::ControllerHelpers::Order
include Spree::Core::ControllerHelpers::Auth
include Spree::Core::ControllerHelpers::Store
include Spree::Core::ControllerHelpers::Common
helper Spree::BaseHelper