before_filter {@amount = Amount.new}

时间:2013-01-24 08:07:25

标签: ruby-on-rails-3 model before-filter

我收到此错误消息

  

金额不能为空

我想根据创建的金额创建付款 我想我的before_filter {@amount=Amount.new},它没有将创建的金额分配给付款方式。因此,即使在创建新金额后,我的付款仍然会出现上述错误。

付款控制器

before_filter {@amount =Amount.new}

def new
 @payment = Payment.new
 respond_to do |format|
  format.html 
  format.json { render :json => @order }
end
end

def create
  @payment = @amount.payments.build(params[:payment])      
  if @payment.save       
     if @payment.purchase
       render :action=> "success"
      else
        render :action=> "failure"
     end
  else
    render :action => "new" 
  end       
end  

金额控制器

def create
@amount = current_user.amounts.build(params[:amount])
respond_to do |format|
  if @amount.save
    format.html { redirect_to root_url, :notice => 'Amount was successfully created.' }
    format.json { render :json => @amount, :status => :created, :location => @amount }
  else
    format.html { render :action => "new" }
    format.json { render :json => @amount.errors, :status => :unprocessable_entity }
  end
end
end


def new
 @amount = Amount.new
 respond_to do |format|
  format.html 
  format.json { render :json => @amount }
 end
end

付款模式

belongs_to :amount

金额模型

 has_many :payments

1 个答案:

答案 0 :(得分:0)

根据指南手册,“过滤器不在控制器的范围内运行”,因此@amount实际上是在某些ActiveSupport::Callbacks::Callback中设置变量而不是您预期的控制器。

我认为你可以通过将lambda放在你的小块前面来解决这个问题。如果没有,您必须定义:set_amount方法并将代码放在那里。

参考文献:

How does rails implement before_filter?

http://guides.rubyonrails.org/action_controller_overview.html

希望有所帮助。