将查询字符串从#new传递给#create

时间:2015-01-29 22:25:36

标签: ruby-on-rails rest controller state

我正在尝试在条带化交易后更新我的广告资源

路由

  get 'product/:size' => 'charges#new'
  resources :charges 

ex:localhost:3000 / product / 32

控制器

  def new
    @product = Product.find_by(size: params[:size])
  end

  def create
    @amount = 500
    @product = Product.find_by(size: params[:size])
    customer = Stripe::Customer.create(
        :email => 'example@stripe.com',
        :card  => params[:stripeToken]
    )

    charge = Stripe::Charge.create(
        :customer    => customer.id,
        :amount      => @amount,
        :description => 'Rails Stripe customer',
        :currency    => 'usd'
    )


    @product.update_attribute(:status, "sold")

  rescue Stripe::CardError => e
    flash[:error] = e.message
    redirect_to charges_path


  end
end

返回

undefined method `update_attribute' for nil:NilClass

通过反复试验后,我认为问题是Rails没有在params中找到[:size],因此实例变量没有被实例化。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

确保在表单中包含:size param,以便在POST期间将其传递给create操作。您可以使用hidden_field_tag

将其包含在表单中
<%= form ... do %>
  <%= hidden_field_tag :size, params[:size] %>

  Other form inputs....
<% end %>