Wechseln Sie beim Erstellen einer Frima-App an einer bestimmten Programmierschule von der Kaufbestätigungsseite zur Kreditkartenregistrierungsseite. Nach der Registrierung der Karte kann ich nicht mehr zur Kaufbestätigungsseite wechseln.
** Ursache: Der Parameter: item_id war 0, als der Controller von items_controller.rb in credit_cards_controller.rb geändert wurde. ** **.
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. In 4-1, 4-2 ist ein Fehler aufgetreten, dass keine item_id vorhanden ist **
Wenn ich es im Terminal überprüfe, verschwindet item_id, wenn es sich auf dem Controller befindet.
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
Ich suchte nach einer Möglichkeit, item_id zu übernehmen ...
[Rails] Verwendung der Sitzung Ruby on Rails Tutorial-Sitzung
Diese Sitzung zu beurteilen scheint brauchbar zu sein. Fügen Sie zunächst include Session Helper zu application_controller.rb hinzu.
application_controller.rb
class ApplicationController < ActionController::Base
include SessionsHelper #Links hinzugefügt
end
Erstellen Sie /sessions_helper.rb in / app / helpers und rufen Sie SessionsHelper mit dem folgenden Code auf
/app/helpers/sessions_helper.rb
module SessionsHelper
end
Referenzartikel Warum wird die "Nicht initialisierte Konstante ApplicationController :: SessionsHelper (NameError)" angezeigt?
Jetzt ist die Sitzung fertig
Speichern Sie zunächst item_id in der Sitzung.
app/controllers/items_controller.rb
def purchase
@item = Item.find(params[:item_id]) #Artikel von params_ID extrahieren
session[:item_id] = @item #Gegenstand herausgenommen_ID in Sitzung speichern
end
Nehmen Sie als Nächstes die Parameter heraus, die in der Sitzung mit dem Controller (credit_cards # index, credit_cards # show) des Registrierungsziels für credit_card gespeichert wurden. Als ich es mit binding.pry überprüft habe, war es ein Array, also habe ich es mit Werten herausgenommen.
app/controllers/credit_cards_controller.rb
#session[:item_id]Sie können die Sitzungsdaten früher mit abrufen.
def index
@item_id = session[:item_id].values.first
end
def show
@item_id = session[:item_id].values.first
end
Extrahieren Sie die vom Controller erstellte Instanzvariable (@item_id) mit Ansicht
rb:app/views/credit_cards/index.html.haml
= link_to "Rückkehr", "/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'")Verwenden Sie die Zahlungsmethode Ihrer Wahl
= link_to "Rückkehr", "/items/#{@item_id}/purchase", class:'return'
Jetzt können Sie item_id in items # purchase ⇄ credit_cards # show, index umtauschen. Löschen Sie die Sitzung, als Sie das Produkt zuletzt gekauft haben
app/controllers/items_controller.rb
def pay
session[:item_id] = nil
end
Dieses Mal habe ich die Sitzung zum Austauschen von Parametern verwendet, aber es scheint, dass ich Parameter über die URL austauschen kann, sodass ich es beim nächsten Mal versuchen möchte.
Darüber hinaus bestehen bei der Verwendung der Sitzung einige Risiken. Lesen Sie daher bei der Verwendung den folgenden Link.