这里的总结果问题,我仍然很难解释这种情况。
我的控制器将用户发送到显示页面
class PriceListsController < ApplicationController
include PriceListsHelper
def show
if params[:customer_id].blank?
@dispatch_location = "F02"
@price_list = PriceList.find(params[:id]).price_list
@full_price_list = PriceList.where("price_list = ?", @price_list).all
else
@dispatch_location_price_list = Customer.find(params[:customer_id]).dispatch_location_price_list
@price_list = Customer.find(params[:customer_id]).customer_selling_price_list
@full_price_list = PriceList.where("price_list = ?", @price_list).all
end
end
end
从这里,我的展示页面循环遍历每个价目表并返回有关该价格表的详细信息。
<%= render 'price_lists/sidebar' %>
<% provide(:title, "Show Price List") %>
<h1><%=@dispatch_location_price_list + " " + params[:id] %></h1>
<div class="row">
<div class="span6 offset3">
<table class="table table-hover table-condensed .table-responsive">
<tr>
<th>Product Price Group</th>
<th>Product Name</th>
<th>Discount</th>
<th>UOM</th>
<th>Price</th>
</tr>
<% @full_price_list.each do |full_price_list| %>
<tr>
<td><%= full_price_list.product_price_group %></td>
<% @product_details = Product.find_by_product_price_group(full_price_list.product_price_group) %>
<td><%= @product_details.product_name %>/td>
<td><%= full_price_list.discount_value %>%</td>
<td><%= full_price_list.unit_of_measure %></td>
<% calculated_price(full_price_list.product_price_group) %>
<td><%= number_to_currency(@dispatch_price - (@dispatch_price * (full_price_list.discount_value/100)),:unit => "$") %></td>
</tr>
<% end %>
</table>
</div>
</div>
我使用辅助方法根据循环中创建的值在循环内进行计算
module PriceListsHelper
def calculated_price(product_price_group)
@dispatch_price = PriceList.where(:price_list => @dispatch_location,:product_price_group => product_price_group).first
if @dispatch_price.nil? || @dispatch_price == 0
@dispatch_price = 0
else
@dispatch_price = @dispatch_price.trade_price
end
end
def product_details(product_price_group)
@product_details = Product.find_by_product_price_group(product_price_group)
end
end
我收到错误“未定义的方法`product_name'为nil:NilClass”但是如果我放置
<% fail %>
之间(我正在使用更好的错误进行调试)
<% @product_details = Product.find_by_product_price_group(full_price_list.product_price_group) %>
<td><%= @product_details.product_name %>/td>
在错误视图中我可以使用live shell调用@ product_details.product_name,它将完美地返回产品名称。一旦我删除了失败参数并让它正常运行,我就会收到错误。
任何想法可能会发生什么?就好像变量一直存在,直到我想要实际使用它。如此困惑:/任何想法都会非常感激。
我的gemfile如下:
source 'https://rubygems.org'
ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0
gem 'rails', '4.0.2'
gem 'bootstrap-sass', '2.3.2.0'
gem 'bcrypt-ruby', '3.1.2'
gem 'pg', '0.15.1'
gem 'will_paginate', '3.0.4'
gem 'bootstrap-will_paginate', '0.0.9'
gem 'rails3-jquery-autocomplete'
gem 'simple_form'
group :development, :test do
gem 'rspec-rails', '2.13.1'
gem 'better_errors'
gem 'binding_of_caller'
end
group :test do
gem 'selenium-webdriver', '2.35.1'
gem 'capybara', '2.1.0'
gem 'factory_girl_rails', '4.2.1'
end
gem 'sass-rails', '4.0.1'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.1'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'
group :doc do
gem 'sdoc', '0.3.20', require: false
end
group :production do
gem 'rails_12factor', '0.0.2'
end
答案 0 :(得分:1)
1你找到了
@product_details = Product.find_by_product_price_group(full_price_list.product_price_group)
在迭代块中。换句话说,每次覆盖@product_details
2 find_by_...
可以返回nil。
结论:至少有一个full_price_list
没有product_price_group
的产品。