将Rails 5 Form Form传递给Controller作为Paramerter

时间:2017-09-07 21:09:32

标签: ruby-on-rails ruby-on-rails-5

我无法将非模型表单字段从视图传递到控制器。我试图传递的值是amount

谢谢。

视图/捐赠/ index.html.erb

<%= form_tag donations_path, style: (current_user.card_last4? ? "display:none" : nil)  do %>
    <div id="error_explanation">
      <% if flash[:error].present? %>
          <p><%= flash[:error] %></p>
      <% end %>
    </div>
    <article>
      <%= label_tag(:amount, 'Donation Amount:') %>
      <%= text_field_tag(:amount) %>
    </article>
    <%= link_to 'Donate', new_donation_path(amount: :amount), class: 'btn btn-primary', id: 'donateButton' %>
<% end %>

控制器/ donations_controller.erb

def create
    customer = current_user.stripe_customer
    amount = params[:amount]
    token = params[:stripeToken]

    begin
      Charge.charge(amount, token)
    end
...

模型/ charge.rb

def self.charge(amount, token)
  charge = Stripe::Charge.create(
     amount: amount,
     source: token,
     currency: 'usd',
     description: 'Test Charge'
  )
end
    ...

3 个答案:

答案 0 :(得分:1)

使用像

这样的视图标记
<%= text_field_tag 'donation[amount]' %>

并允许控制器中的参数

def donation_params
  params.require(:donation).permit(:amount)

您可以使用donation_params[:amount]访问该值。

答案 1 :(得分:1)

您不应该使用link_to来触发表单提交。请改用submit_tag。除此之外,请确保您的强力参数列入白名单,无论您提交的是什么。

答案 2 :(得分:0)

我猜你没有使用强大的参数。为什么不添加| f |最后像这样

<%= form_tag donations_path, style: (current_user.card_last4? ? "display:none" : nil) do |f| %>

然后使用<%= f.text_field :amount %>

然后在params你应该做params["donation"]["amount"]之类的事来获得值

编辑:最后更改link_to

f.submit