Lors de la création d'une application frima dans une certaine école de programmation, passez de la page de confirmation d'achat à la page d'enregistrement de la carte de crédit. Après avoir enregistré la carte, je ne peux plus passer à la page de confirmation d'achat.
** Cause: Le paramètre: item_id était égal à 0 lorsque le contrôleur est passé de items_controller.rb à credit_cards_controller.rb. ** **
resources :items, only: [:index, :new, :create, :show, :edit, :destroy] do
get '/purchase/:id', to: 'items#purchase', as: :purchase
end
resources :credit_cards, only: [:index, :new, :create, :show, :destroy]
** 5. Une erreur s'est produite dans 4-1, 4-2 indiquant qu'il n'y a pas de item_id **
Lorsque je l'enregistre dans le terminal, item_id disparaît lorsqu'il chevauche le contrôleur.
Processing by ItemsController#purchase as HTML
Parameters: {"item_id"=>"2"}
Item Load (0.3ms) SELECT `items`.* FROM `items` WHERE `items`.`id` = 2 LIMIT 1
Processing by CreditCardsController#show as HTML
Je cherchais un moyen de reprendre item_id ...
[Rails] Comment utiliser Session Tutoriel-Session Ruby on Rails
Juger cette session semble utilisable. Tout d'abord, ajoutez include Session Helper à application_controller.rb.
application_controller.rb
class ApplicationController < ActionController::Base
include SessionsHelper #Ajout de la gauche
end
Créez /sessions_helper.rb dans / app / helpers et appelez SessionsHelper avec le code ci-dessous
/app/helpers/sessions_helper.rb
module SessionsHelper
end
Article de référence Pourquoi la "Constante non initialisée ApplicationController :: SessionsHelper (NameError)" s'affiche?
Maintenant la session est prête
Tout d'abord, enregistrez item_id dans la session.
app/controllers/items_controller.rb
def purchase
@item = Item.find(params[:item_id]) #élément des paramètres_Extraire l'identifiant
session[:item_id] = @item #Article retiré_Enregistrer l'identifiant dans la session
end
Ensuite, retirez les paramètres enregistrés en session avec le contrôleur (credit_cards # index, credit_cards # show) de la destination d'enregistrement de la carte de crédit. Quand je l'ai vérifié avec binding.pry, c'était un tableau, donc je l'ai retiré avec des valeurs.
app/controllers/credit_cards_controller.rb
#session[:item_id]Vous pouvez récupérer les données de session plus tôt avec.
def index
@item_id = session[:item_id].values.first
end
def show
@item_id = session[:item_id].values.first
end
Extraire la variable d'instance (@item_id) créée par le contrôleur avec vue
rb:app/views/credit_cards/index.html.haml
= link_to "Revenir", "/items/#{@item_id}/purchase", class:'return'
rb:app/views/credit_cards/show.html.haml
%button.enter__permit__box.btn(onclick="location.href='/items/#{@item_id}/purchase'")Utilisez le mode de paiement de votre choix
= link_to "Revenir", "/items/#{@item_id}/purchase", class:'return'
Vous pouvez désormais échanger item_id dans les items # purchase ⇄ credit_cards # show, index. Supprimer la session lors de votre dernier achat du produit
app/controllers/items_controller.rb
def pay
session[:item_id] = nil
end
Cette fois, j'ai utilisé la session pour échanger des paramètres, mais il semble que je puisse échanger des paramètres en utilisant l'URL, alors j'aimerais l'essayer la prochaine fois.
De plus, lors de l'utilisation de session, certains risques sont impliqués, veuillez donc lire le lien ci-dessous lorsque vous l'utilisez.