У меня есть класс ruby во вспомогательном рельсе и внутри этого класса. Я не могу получить доступ к методу cookie ActiveController. Я посмотрел на этот вопрос , и он не решил мою проблему, и я не делаю то, что этот парень, так как мой класс ruby находится в области видимости контроллера и вызывается им только когда-либо. Какой лучший способ избавиться от
NameError (undefined local variable or method `cookies` for #<CartHelper::CartObject:...>):
app/helpers/cart_helper.rb:##:in `save`
app/helpers/cart_helper.rb:##:in `add_product`
app/controllers/cart_controller.rb:##:in `add`
в моем помощнике? (Я также открыт для предложений о том, как сделать этот подход более подходящим для Ruby-y)
module CartHelper
class CartObject
def load (cart)
# converts from json
end
private def save
cookies.signed.permanent[:cart] = dump
end
private def dump
# converts to json
end
def add_product (product)
# ...
save
end
def remove_product (product)
# ...
save
end
end
def get_cart
return CartObject.new if cookies.signed.permanent[:cart].nil?
CartObject.load(cookies.signed.permanent[:cart])
end
end
и CartHelper
включены в контроллер приложения курса
class CartController < ApplicationController\
skip_before_action :verify_authenticity_token, only: [:add]
def view
cart = get_cart
@products = cart.products
end
def add # only by ajax
cart = get_cart
cart.add_product(Oj.strict_load(params[:product]))
head 200
end
def remove
cart = get_cart
cart.remove_product(params['rem'])
flash['success'] = 'Product removed.'
redirect_to '/cart'
end
end