在rails 5 api模式下使用`helper_method`定义助手

时间:2017-11-15 10:28:08

标签: ruby-on-rails ruby-on-rails-5

编写Rails应用程序我以前在视图中没有任何实例变量,而是在控制器上定义helper_method s。这些方法将由控制器和视图以相同的方式使用。这使我的代码干净。现在使用Rails 5中的api模式,我不能再这样做了,helper_method不存在。在视图中使用变量是我最讨厌的事情之一。

例如

class ProductsController < ActionController::API
   helper_method :products, :current_user

   private

   def products
     @products ||= current_user.products
   end

   def current_user
     @current_user ||= User.find(session[:user_id])
   end
end

index.json.jbuilder视图中,我想以这种方式使用它。

 json.products products do |product|
    json.name product.name
    json.price product.price
    # and so on
 end

1 个答案:

答案 0 :(得分:2)

我没有对此进行测试,但您可以尝试在AbstractController::Helpers之前在控制器中添加helper_method模块

include AbstractController::Helpers

helper_method https://github.com/rails/rails/blob/b5db73076914e7103466bd76bec785cbcfe88875/actionpack/lib/abstract_controller/helpers.rb

的源代码