0

ストライプ支払いをイベントコントローラーに組み込む方法を理解しようとしていますが、「/登録/新規」と言ってユーザーを同じページに留めずにすべてがどのように機能するかを理解するのに苦労しています。技術。

注 - 私はアクティブレコードではなくモンゴイドを使用しています

これまでの私のコードは次のとおりです。

モデル

class Registration
  include Mongoid::Document
  field :address 
  field :email
  field :first_name
  field :last_name
  field :postcode
  field :stripe_card_token
  field :stripe_customer_token

  def save_with_payment event
    if valid?
      charge = Stripe::Charge.create({
        amount: total_price(event),
        currency: "gbp",
        card: stripe_card_token,
        description: email
      })
      save
    end
  rescue
    false
  end

  def total_price attribute
    price = attribute.price
    price
  end
end

<%= simple_form_for @registration, :html => { :class => 'custom medium' },
      :method => :post, :url => registration_path do |f| %>
  <h2>Contact Information</h2>
  <%= f.input :first_name %>
  <%= f.input :last_name %>
  <%= f.input :email %>
  <%= f.input :address %>
  <%= f.input :postcode %>
  <!-- Add stripe card details -->
  <h2>Payment Information</h2>
  <%= f.input :stripe_card_token, as: :hidden %>
  <div class="input card_number">
    <label for="card_number">Card number</label>
    <%= text_field_tag :card_number %>
  </div>
  <div class="input card_cvc">
    <label for="card_code">Security code (CVC)</label>
    <%= text_field_tag :card_cvc %>
  </div>
  <div class="input card_dates">
    <label>Card expiration date</label>
    <%= select_month nil, { add_month_number: true }, { id: "card_month"} %>
    <%= select_year nil,
          { add_year: Date.today.year, end_year: Date.today.year + 15 },
          { id: "card_year"} %>
  </div>
  <%= f.button :submit, "Register" %>
<% end %>

コントローラ

class EventsController < ApplicationController
  def show
    @event = Event.where(:slug => params[:slug]).first
    @registration = Registration.new
  end

  def payment
    @registration = Registration.new(params[:registration])
    if @registration.save_with_payment(@event)
      redirect_to event_path, :notice => "Thank you for registering"
    else
      redirect_to event_path, :notice => "We're sorry, something went wrong"
    end
  end
end

ルート

Disrupt::Application.routes.draw do

  ActiveAdmin.routes(self)
  devise_for :admin_users, ActiveAdmin::Devise.config

  root to: "pages#home"

  match '/home' => "pages#home"
  match '/:slug' => "events#show"

end

現在、ページはホームページにリダイレクトされており、通知を表示するためにイベント ページに戻ることはありません。レールを使用して数か月しか経っていないため、まだ学習中です。

どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたのシナリオでは、2 つのケースが考えられます -:

1. event_path が示すように、ユーザーをイベント インデックス ページにリダイレクトする場合。次に、コントローラーで間違ったアクション宣言があります。インデックスにEventsControllerもう1つのアクションを追加します

def index 
end

イベントのインデックス ページに移動する場合は、次のようにルートを作成します。

Disrupt::Application.routes.draw do

  ActiveAdmin.routes(self)
  devise_for :admin_users, ActiveAdmin::Devise.config



  match '/home' => "pages#home"
  match '/:slug' => "events#show"
  match '/events' => "events#index"
  root to: "pages#home"

end

2.ページをイベント表示ページにリダイレクトする場合は、1 つの@eventインスタンス変数を渡す必要がありますevents_path(@event)-:

     def payment
      @registration = Registration.new(params[:registration])
      if @registration.save_with_payment(@event)
        redirect_to event_path(@event), :notice => "Thank you for registering"
      else
        redirect_to event_path(@event), :notice => "We're sorry, something went wrong"
      end
     end

これはあなたを助けると思います。

于 2013-07-08T13:28:25.523 に答える