나는 가입 양식이 있습니다. 그리고 모든 정보를 한 페이지로 옮겼습니다. 이전에 사용자는 /subscriptions/new?plan_id=1
또는 /subscriptions/new?plan_id=12
계획의 두 페이지로 연결되었습니다.라디오 버튼 태그에 param 값을 추가하는 방법
이제 페이지는 subscriptions/new
입니다. 각 라디오 값에 매개 변수를 추가하면 사용자가 신용 카드 또는 페이팔을 사용하여 체크 아웃 할 때 라디오 버튼을 사용하여 선택한 가입 계획에 서명 할 수 있습니다.
<%= form_for @subscription do |f| %>
<div class="col-3">
<div class="plan">
<%= image_tag "/assets/best1.png" %>
<h1><%= radio_button_tag :plan_id, '1,', true %><label for="plan_id_1"><span><span></span></span></label>$13.50 a year</h1>
<h2>12-Month Membership</h2>
</div>
<div class="plan">
<h1><%= radio_button_tag :plan_id, '2' %><label for="plan_id_2"><span><span></span></span></label>$1.35 a month</h1>
<h2>1-Month Membership</h2>
</div>
</div>
<div class="sm_form_container">
<div class="row">
<div class="field">
<h1>Payment Information</h1>
</div>
</div>
<div class="row">
<div class="field">
<% if @subscription.errors.any? %>
<h2><%= pluralize(@subscription.errors.count, "error") %> prohibited this subscription from being saved:</h2>
<ul>
<% @subscription.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
<%= f.hidden_field :plan_id %>
<%= f.hidden_field :stripe_card_token %>
<%= f.hidden_field :paypal_customer_token %>
<%= f.hidden_field :paypal_payment_token %>
<% unless @subscription.payment_provided? %>
<%= radio_button_tag :pay_with, :card, true %>
<%= label_tag :pay_with_card do %>
<%= image_tag "visa.png" %>
<%= image_tag "mastercard.png" %>
<%= image_tag "discover.png" %>
<%= image_tag "american_express.png" %>
<%= image_tag "jcb.png" %>
<% end %>
<%= radio_button_tag :pay_with, :paypal %>
<%= label_tag :pay_with_paypal do %>
<%= image_tag "paypal.png" %>
<% end %>
<% end %>
</div>
</div>
<div class="row">
<div id="paypal_checkout" style="display:none">
<%= link_to image_tag("https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif"), paypal_checkout_path(plan_id: @subscription.plan_id) %>
</div>
</div>
<div id="billing_fields">
<div class="field">
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :email, :value => current_user.email %>
</div>
<% if @subscription.payment_provided? %>
Payment has been provided. Click "Subscribe" to complete the subscription.
<% else %>
<div class="row">
<div class="field">
<%= label_tag :card_owner, "Name (as it appears on the card)" %>
<%= text_field_tag :card_owner, nil, name: nil %>
</div>
<div class="field">
<%= label_tag :card_number, "Credit Card Number" %>
<%= text_field_tag :card_number, nil, name: nil %>
</div>
</div>
<div class="row">
<div class="field">
<%= label_tag :card_code, "Security Code on Card (CVV)" %>
<%= text_field_tag :card_code, nil, name: nil %>
</div>
<div class="field" id="expiration">
<%= label_tag :card_month, "Card Expiration" %><br />
<%= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"} %>
<%= select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"} %>
</div>
<% end %>
<div id="stripe_error">
<noscript>JavaScript is not enabled and is required for this form. First enable it in your web browser settings.</noscript>
</div>
</div>
<div class="row">
<div class="field"><%= f.submit "Subscribe", class: 'btn', style: "width: 40%; margin-left: 165px" %></div>
</div>
</div>
<% end %>
</div>
</div>
구독 컨트롤러 :
def new
plan = Plan.find(1)
@subscription = plan.subscriptions.build
if params[:PayerID]
@subscription.paypal_customer_token = params[:PayerID]
@subscription.paypal_payment_token = params[:token]
@subscription.email = @subscription.paypal.checkout_details.email
end
render layout: 'new_application' end
def paypal_checkout
plan = Plan.find(params[:plan_id])
subscription = plan.subscriptions.build
redirect_to subscription.paypal.checkout_url(
return_url: new_subscription_url(:plan_id => plan.id),
cancel_url: root_url
)
end
경로 :
resources :subscriptions
resources :plans
get 'paypal/checkout', to: 'subscriptions#paypal_checkout'
'* _tag'헬퍼를 사용하는 이유가 무엇입니까? '@ subscription'이 모델 인스턴스 인 경우 각각 <% = f.radio_button : plan_id, 1 %>'및'<% = f.radio_button : plan_id, 2 %>'를 수행하여 선택한 값을 'params [: subscription] [: plan_id]' – sled
@sled 컨트롤러를 포함 시켰습니다. 내가'plan = plan.find (1)'을 읽는 것을 잊었다. 그래서 항상 계획 1로 가게된다. 나는 컨트롤러를 plan = find.find (params [: plan_id])로 변경하려고 생각하고 있었다. 내가보기에 합격하면 효과가 있어야한다. 그러나 뷰에 매개 변수를 전달하는 예를 보여줄 수 있습니까? –