私はボート用の広告/広告を作成できる既存のRailsアプリケーションを使用しています。現在、支払いは一切統合されておらず、ユーザーがフォームを提出すると、それが掲示されます。今、私はSpripe Checkoutを追加することを検討しています(私が間違っている場合は、私が正しいと思われるので、正しいと思います)。私はこれに接近する最善の方法が何であるか分かりません。理想的には、ユーザーがフォームを送信してから支払いを求められるようにしたいと思います。Stripe CheckoutとRailsアプリケーションの統合
また、私はどのようなアプローチをとるべきかわからない:1)データベースで広告が最初に作成された後、支払いでブール値(たとえば "支払い")の値が変更されるか、2)広告のデータベース成功した支払いでのみレコードが作成されます。
Stripeチュートリアルのような新しいチャージコントローラを作成して、既存のAdsControllerに組み込むべきですか?
ads_controller.rb
class AdsController < ApplicationController
before_action :logged_in_user, only: [:edit, :update, :new]
before_action :correct_user, only: [:edit, :update, :destroy]
def index
if params[:category].blank? && params[:state].blank?
@ads = Ad.all.order("created_at DESC")
elsif params[:category].blank?
@state_id = State.find_by(name: params[:state]).id
@ads = Ad.where(state_id: @state_id).order("created_at DESC")
else
@category_id = Category.find_by(name: params[:category]).id
@ads = Ad.where(category_id: @category_id).order("created_at DESC")
end
@ads = @ads.paginate(page: params[:page], :per_page => 21)
end
def new
@ad = Ad.new
end
def create
@ad = current_user.ads.build(ad_params)
if @ad.save
flash[:success] = "Ad successfully created"
redirect_to @ad
else
render 'new'
end
end
def show
@ad = Ad.find(params[:id])
end
def edit
@ad = Ad.find(params[:id])
end
def update
@ad = Ad.find(params[:id])
if @ad.update_attributes(ad_params)
flash[:success] = "Ad successfully updated"
redirect_to @ad
else
render 'edit'
end
end
def destroy
@ad.destroy
flash[:success] = "Ad deleted"
redirect_to request.referrer || root_url
end
private
def ad_params
params.require(:ad).permit(:title, :price, :year, :location, :description, :contact_name, :contact_number, :category_id, :picture, :picture2, :picture3, :state_id)
end
def correct_user
@ad = current_user.ads.find_by(id: params[:id])
redirect_to root_url if @ad.nil?
end
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in"
redirect_to login_path
end
end
私の現在のフォーム:
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@ad, html: { multipart: true }) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label "Category:" %>
<%= f.collection_select :category_id, Category.all, :id, :name, { prompt: "Select Category" }, class: 'form-control' %>
# Lots of other form fields
<%= f.submit "Submit", class: "btn btn-primary" %>
<% end %>
</div>
この上の任意の考えは非常に理解されるであろう。
ありがとう、とても助かりました!私はあなたが提案したものを正確にやり遂げました - 支払いのための別のコントローラを作成しました。私はユーザーが最初に広告を作成して(dbで保存する)、次のページで支払いを求めることができます。すぐに支払われないと、広告は一定期間データベースに残ります(しかし、リストには表示されません)。その後、広告は削除されます。ユーザーは支払いを含むすべての広告を管理でき、いつでも支払いを受けることができます。おそらくあなたが頭に入れていた "トランザクション"プロセスのようなものではありませんが、現在のこのアプリではうまく機能します。 – Bella