我有以下个人课程来处理购物车的安排,但是当我尝试在我的控制器中调用此类的方法时,它表示未定义的方法add_cesta
。
这是我的班级
class Carro
attr_reader :cesta
def initialize
@cesta = []
end
def add_cesta(articulo)
@cesta << articulo
end
end
这是我的控制器
class TiendaController < ApplicationController
def index
@titulo = "Bienvenido a la Tienda"
@articulos = Articulo.all.order("nombre").page(params[:page]).per_page(4)
end
def quienes_somos
@titulo = "Bienvenido a la Tienda"
end
def contacto
@titulo = "Bienvenido a la Tienda"
end
def anadir_producto
@articulo = Articulo.find(params[:id])
@carro = sesion_carrito
@carro.add_cesta(@articulo)
flash[:info] ="Producto añadido #{@articulo.nombre}"
redirect_to inicio_url
end
def ver_carro
@carro = session[:carro]
end
def vaciar_carrito
session[:carro] = nil
flash[:info] = "Carrito vacio"
redirect_to inicio_url
end
private
def sesion_carrito
session[:carro] ||= Carro.new
end
end
答案 0 :(得分:0)
我相信你并没有真正将实例变量设置为购物车。
也许session[:carro]
包含的不是购物车?
你能否发布完整的错误信息,因为这会澄清你的问题。
现在尝试设置:
@carro = Carro.new
然后稍微重构会话部分。
- 编辑 -
似乎会话变量是字符串而不是实际对象。
尝试将cart_id存储在会话中,稍后再检索。
def ver_carro
@carro ||= (Carro.find(session[:carro_id]) || Carro.new)
end
有类似的东西。
答案 1 :(得分:-1)
您无法访问控制器中的方法,因为它是在单独的类中定义的。您需要通过要求控制器类中的文件显式提供访问权限。将路径放在引号中的实际文件中。在此处查看类似问题:Including a Ruby class from a separate file
require 'file_path/carro'
class TiendaController < ApplicationController