jos*_*ing 3 ruby-on-rails spree ruby-on-rails-4
我有一个狂欢商务2.1.1应用程序(Rails 4.0.0),我想在产品详细信息页面上显示一些"相关产品".相关产品只是随机选择的产品,其品牌/性别与正在观看的产品相同.它正在工作......我已经制作了products_controller_decorator.rb,它扩展了狂欢products_controller.rb.
Spree products_controller.rb有一个before_filter,它设置@product:
before_filter :load_product, :only => :show
Run Code Online (Sandbox Code Playgroud)
我自己的装饰师有一个设置的方法 @related_products
before_filter :get_related_products, :only => :show
Run Code Online (Sandbox Code Playgroud)
问题是:
a)碰巧,load_product之前的过滤器在我get_related_products之前的过滤器之前被调用,所以顺便说一句,我可以访问@product它设置变量.但据我所知,并不能保证会发生这种情况.我想确定稍后调用我的过滤器...
和
b)Spree的show方法也设置了@taxon,我真的希望能够自己使用 get_related_products方法中使用它.
所以,我想要的是像CakePHP这样的钩子before_render,它在控制器方法运行后被调用,但是在渲染视图之前.我似乎无法找到等效的导轨.有这样的事吗?after_filter我不会这样做,因为在渲染视图后调用它.
如果没有,那么在Spree的产品控制器get_related_products的show方法运行之后,通过哪种方式可以获得它的实例变量是什么?
a)Spree的load_product将始终在您之前注册的get_related_products之前调用.
b)before_filter和after_filter之间没有before_render和过滤器.
你可以通过覆盖来实现:render:
class Spree::ProductsController.class_eval do
def render(options = nil, extra_options = {}, &block)
# here you define related products
@related_products = search_related_products(@product)
# don't forget to call super
super(options, extra_options, &block)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3354 次 |
| 最近记录: |