【问题标题】:before_filter {@amount =Amount.new}before_filter {@amount =Amount.new}
【发布时间】:2013-01-24 08:07:24
【问题描述】:

我收到此错误消息

金额不能为空

我想根据创建的金额创建付款 我认为我的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

【问题讨论】:

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


    【解决方案1】:

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

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

    参考资料:

    How does rails implement before_filter?

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

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多