Pessoal, estou implementando um sistema de carrinho e estou tendo problema para guardar o id do produto em session[:cart], meu controller está assim:
class CartController < ApplicationController
def add_product
(session[:cart] ||= []) << params[:id]
p session[:cart]
end
end
O que é definido em params[:id] é via ajax, não sei se isso influência para o Rails. Questão de segurança… Quando peço para imprimir, ele imprime somente o que chegou por último, isto é, ele está fazendo um callback em session[:cart] após o processamento, redefinindo-o sempre para o seu estado anterior, no caso, com ‘nil’.
Nao acha que seria mais interessante, transformar em filter o cart?
A sessao nao esta dando timeout?
Perdão, mas não entendi o que quis dizer.
Acho que não, pois não mexi nas configurações defult do Rails. Além disso, eu tenho um sistema de login que funciona normalmente. Essa parada acontece somente quando arrasto um “produto” para o “carrinho”, e é quando devo guardar o id do produto em um array, e esse, por sua vez, na key “:cart” do hash “session”.
Esqueci de mencionar que não estou implementando um aplicativo, mas estou ainda trabalhando em um desafio, isto é, estudando. Por isso, não estou guardando dados da sessão no banco de dados. O desafio me foi proposto assim.
Meu amigo, resolvido. O Rails, como usa o padrão MVC, esperava que uma view fosse renderizada ao final do processamento do método do controller. Como nada era retornado, um erro 500 ocorria, fazendo o Rails executar um rollback em session[:cart]. O método agora ficou assim:
def add_product
(session[:cart] ||= []) << params[:id]
render text: ''
end
A se o problema era falta de view, acho que fica mais interessante colocar
render :nothing => true
no lugar de render text: “”
1 curtida
De fato funciona.
Obrigado, bom amigo.