在我本地计算机上的rails开发环境中,当访问我的应用程序的“财务”页面时,我收到以下“nil”错误消息。有趣的是,在生产中,“财务”页面显示正确,没有错误。
经过数天的试验和错误,试图查看登录供应商(用户)为什么抛出'nil',我在这里。我对编程有点偏高,所以我的预感是开发和生产数据库在某种程度上有所不同,从而导致开发环境中供应商的“零”结果?无论如何,我不知道从哪里开始。错误消息和development.rb中的引用文件也包含在下面。任何帮助将不胜感激。 Rails(3.2.17),Ruby(1.9.3 p545)
错误讯息:
NoMethodError in Financials#income_statement
Showing /home/vagrant/umarkit/app/views/financials/income_statement.html.erb where line #24 raised:
undefined method `[]' for nil:NilClass
Extracted source (around line #24):
21: </tr>
22: <tr><td class="lft"><%= t('financial_statements.revenues_html') %></td>
23: <% @income_statemens.each do |incomestatement| %>
24: <td class="lft"><%=number_to_financials(incomestatement.revenues)%></td>
25: <% end %>
26: </tr>
27: <tr><td class="lft"><%= t('financial_statements.cogs_html') %></td>
Rails.root: /home/vagrant/umarkit
Application Trace:
app/views/financials/income_statement.html.erb:24:in `block in app_views_financials_income_statement_html_erb___1058489885_86848080'
app/views/financials/income_statement.html.erb:23:in `each'
app_views_financials_income_statement_html_erb___1058489885_86848080'
app/controllers/financials_controller.rb:36:in `income_statement'
app / views / financials / income_statement.html.erb
<h1 class="sectionTitle">Income Statement</h1>
<div class="filterRange">
<%= form_tag('/financials/income_statement', :method => 'get') do %>
<label>Show Statement for:
<%= select_tag 'year', options_for_select((@year-10)..(@year+5), @year) %>
</label>
<input type="submit" class="btn-showFilter" value="Show">
<% end %>
</div>
<div class="filterState">
<p>Showing Year: <%= @year %></p>
</div>
<% if !@income_statemens.nil? %>
<table class="utable">
<tr><th class="lft nwp" width="350"><%= t('financial_statements.year_html') %></th>
<% @income_statemens.each do |incomestatement| %>
<th class="lft" width="534"><%=incomestatement.year%></th>
<% end %>
</tr>
<tr><td class="lft"><%= t('financial_statements.revenues_html') %></td>
<% @income_statemens.each do |incomestatement| %>
<td class="lft"><%=number_to_financials(incomestatement.revenues)%></td>
<% end %>
</tr>
<tr><td class="lft"><%= t('financial_statements.cogs_html') %></td>
<% @income_statemens.each do |incomestatement| %>
<td class="lft"><%=number_to_financials(incomestatement.cogs)%></td>
<% end %>
应用程序/控制器/ financials_controller.rb
class FinancialsController < ApplicationController
before_filter :authenticate_vendor!
# GET /financials
# GET /financials.xml
def index
@vendor = current_vendor
if @vendor != nil
@financials = @vendor.get_financial_statements
end
if @financials == nil
flash.now[:error] = "No transactions available."
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @financials }
end
end
def income_statement
@vendor = current_vendor
@year = params[:year] ? params[:year].to_i : Date.today.year
puts @vendor.methods
if @vendor != nil
@income_statemens = @vendor.get_income_statement(@year)
@income_statemens = @income_statemens.incomestatements
end
if @income_statemens == nil
flash.now[:error] = "No transactions available."
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @income_statemens }
end
end
def balance_sheet
@vendor = current_vendor
@year = params[:year] ? params[:year].to_i : Date.today.year
if @vendor != nil
@balance_sheet = @vendor.get_balance_sheet(@year)
@balance_sheet = @balance_sheet.balancesheets
end
if @balance_sheet == nil
flash.now[:error] = "No transactions available."
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @balance_sheet }
end
end
def cash_flow
@vendor = current_vendor
@year = params[:year] ? params[:year].to_i : Date.today.year
if @vendor != nil
@cash_flow = @vendor.get_cash_flow(@year)
@cash_flow = @cash_flow.cashflows
end
if @cash_flow == nil
flash.now[:error] = "No transactions available."
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @cash_flow }
end
end
def show_transactions
@vendor = current_vendor
if @vendor != nil
@transactions = @vendor.get_transactions
end
if @transactions == nil
flash[:error] = "No transactions available, or First Date Stamp is nil."
end
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @entries }
end
end
end
development.rb
Ketch::Application.configure do
# Settings specified here will take precedence over those in config/environment.rb
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since you don't have to restart the webserver when you make code changes.
config.cache_classes = false
# Log error messages when you accidentally call methods on nil.
config.whiny_nils = true
# Show full error reports and disable caching
config.consider_all_requests_local = true
config.action_controller.perform_caching = false
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false
# Print deprecation notices to the Rails logger
config.active_support.deprecation = :log
# Only use best-standards-support built into browsers
config.action_dispatch.best_standards_support = :builtin
# Devise Configuration
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.assets.debug = true
end
答案 0 :(得分:0)
我会测试数据不同的假设,因为Rails使用不同的数据库进行开发,测试和生产环境。尝试重置基础数据并确认。