Ruby on rails 如何将参数值添加到单选按钮标记
我有一张订阅表。我把所有的信息移到了一页。之前,我将用户链接到计划的两个单独页面Ruby on rails 如何将参数值添加到单选按钮标记,ruby-on-rails,Ruby On Rails,我有一张订阅表。我把所有的信息移到了一页。之前,我将用户链接到计划的两个单独页面/subscriptions/new?plan_id=1或/subscriptions/new?plan_id=12 现在该页面仅为订阅/new。如何将参数添加到每个单选值中,以便当用户使用其信用卡或paypal签出时,它将为他们注册使用单选按钮选择的订阅计划 <%= form_for @subscription do |f| %> <div class="col-3"> &l
/subscriptions/new?plan_id=1
或/subscriptions/new?plan_id=12
现在该页面仅为订阅/new
。如何将参数添加到每个单选值中,以便当用户使用其信用卡或paypal签出时,它将为他们注册使用单选按钮选择的订阅计划
<%= 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>
路线:
resources :subscriptions
resources :plans
get 'paypal/checkout', to: 'subscriptions#paypal_checkout'
假设您有一个成员模型,并且成员有一个id和一个名称(除其他外)。订阅具有计划id(成员计划) 订阅控制器从数据库加载成员身份
def edit
@memberships = Memberships.all
end
在编辑视图中,使用成员身份填充单选按钮集,将计划id设置为成员身份id(我使用haml,这是从表布局中获得的,但它应该很容易转换)
保存时,从params生成的订阅模型将具有所选成员模型的plan_id值。您可以在
新建
操作中预填充模型,然后使用表单生成器,以便这些预填充值传播到视图中
控制器:
def new
if params.has_key?(:plan_id)
plan = Plan.find(params[:plan_id])
else
# make plan with id 1 our default plan if no plan_id has been given
plan = Plan.find(1)
end
# this should set the plan_id in the Subscription model,
# if not - ensure you have a `belongs_to :plan` inside your Subscription model.
@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 new
if params.has_key?(:plan_id)
plan = Plan.find(params[:plan_id])
else
# make plan with id 1 our default plan if no plan_id has been given
plan = Plan.find(1)
end
# this should set the plan_id in the Subscription model,
# if not - ensure you have a `belongs_to :plan` inside your Subscription model.
@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
首先删除隐藏的字段标记
,然后调整此部分以使用表单生成器,即
。然后表单生成器将负责选择正确的单选按钮
<%= form_for @subscription do |f| %>
<div class="col-3">
<div class="plan">
<%= image_tag "/assets/best1.png" %>
<h1><%= f.radio_button :plan_id, 1 %><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><%= f.radio_button :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>
....
每年13.50美元
12个月会员资格
每月1.35美元
一个月会员资格
....
您使用*\u标签的原因是什么?如果@subscription
是一个模型实例,您可以分别执行
和
,并使用参数[:subscription][:plan\u id]
@sled I刚包含控制器来获取所选值。我忘了我让它读了plan=plan.find(1)
,这就是为什么它总是带你去计划1。我正在考虑将控制器更改为plan=plan.find(params[:plan\u id])
,如果我传入视图,它应该可以工作。但是,您可以展示在视图中传递参数的示例吗?我只是快速查看了一下您的代码。我看不出你有什么不同。我的意思是说,在我发表最后一篇文章之前,我做了一些调整,但没有成功。我遇到无法找到没有ID的Plan
,这就是为什么我会问如何在视图中传递参数。我将c&p你的代码,但它实际上是我在过去尝试过的同一件事。为了确认它,复制相同的错误(因为我们有相同的代码)ActiveRecord::RecordNotFound at/subscriptions/new无法在第行Plan=Plan.find(params[:Plan\u ID])
上找到没有ID的计划,这意味着您没有在url中传递计划ID参数,您的路线看起来如何?我添加了一个检查,在没有通过计划ID的情况下,检查ID为1的产品。啊,我忘了订阅控制器中的其他代码。调用的paypal\u checkout
操作。代码addedmhh。。。当您被重定向到new
控制器时,浏览器中的url中是否有参数,例如“/subscriptions/new?plan_id=2”或类似的参数?
<%= form_for @subscription do |f| %>
<div class="col-3">
<div class="plan">
<%= image_tag "/assets/best1.png" %>
<h1><%= f.radio_button :plan_id, 1 %><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><%= f.radio_button :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>
....