简体   繁体   English

Rails为nil:NilClass使用的未定义方法`+'

[英]Rails undefined method `+' for nil:NilClass

I have a method 'calc_price' that was working previously, and still works in console, but is now giving me the following error in a browser: 我有一个以前一直在使用的方法“ calc_price”,现在仍然可以在控制台中使用,但是现在在浏览器中出现以下错误:

NoMethodError in Quotes#index

undefined method `+' for nil:NilClass

18:             Price: $<%= f.calc_price %><br />

app/models/quote.rb:33:in `block in calc_price'
app/models/quote.rb:13:in `calc_price'
app/views/quotes/index.html.erb:18:in `block in _app_views_quotes_index_html_erb__1788058106025144185_70227449765940'
app/views/quotes/index.html.erb:15:in `each' 
app/views/quotes/index.html.erb:15:in `_app_views_quotes_index_html_erb__1788058106025144185_70227449765940'

The fact that it still works in console is confusing to me, especially since I didn't change the method at all for it to break. 它仍然可以在控制台中工作的事实令我感到困惑,尤其是因为我根本没有更改方法来使其中断。 The method: 方法:

def calc_price
    self.items.each do |item|
        pr = if item.amount < 10
            item.product.pricerange0
        elsif item.amount < 25 
            item.product.pricerange1
        elsif item.amount < 50 
            item.product.pricerange2
        elsif item.amount < 100
            item.product.pricerange3
        elsif item.amount < 250
            item.product.pricerange4
        elsif item.amount < 500
            item.product.pricerange5
        end
        screens = 0
        sd = item.shirtdesigns.count
        pd = item.pantdesigns.count
        screens = (sd+pd)
        screenprice = (screens*25)
        inkprice = ((item.inkcolors-1)*0.5)
        newprice = ((pr+inkprice)*item.amount+screenprice)
        item.price = newprice
        item.save
    end
    newprice = self.items.sum('price')
    self.price = newprice
    self.save
    return self.price
end

quote controller 报价控制器

def index
  @quote = Quote.find(:all)
  @myquotes = Quote.find(:all, :conditions => { :user_email => current_user.email })
end

I tried adding screenprice = 0, newprice = 0 and inkprice = 0 to see if that would make a difference but it did not. 我尝试添加screenprice = 0,newprice = 0和inkprice = 0,以查看是否会有所不同,但事实并非如此。

If it still works in console does that mean maybe its not the method itself that is broken? 如果它仍然可以在控制台中运行,这是否意味着不是方法本身被破坏了?

Any help would be greatly appreciated! 任何帮助将不胜感激! Thanks 谢谢

pr is most likely nil. pr很可能是零。 An item with an amount greater than 500 would result in pr being nil in the code above. 数量大于500的项目将导致pr在上面的代码中为nil。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM