未定义的方法' model_name'为零:零级

时间:2016-06-18 07:18:49

标签: ruby-on-rails ruby ruby-on-rails-4 heroku config

所以我跟随Ryan Bates Screencast使用Paypal基本付款,一切都在开发中运作良好。但是,当我部署到Heroku并尝试它。我得到了Undefined method 'model_name' for nil:Nil

它似乎打破了购物车页面中的form_for。

  <%= form_tag APP_CONFIG[:paypal_url] do %>
  <% end %>

由于某种原因,它没有加载变量APP_CONFIG[:paypal_url]。我使用nifty:config生成它,如教程中所做。

更新

它实际上正在加载APP_CONFIG [:paypal_url]。查看了heroku控制台,发现它正在加载变量,但是说undefined method 'model_name' for nil:Nil Class

我已尝试删除APP_CONFIG[:paypal_url]并将其替换为实际网址,但它仍然说同样的事情。

在开发方面都很有用,但在Heroku上却没有。我做错了吗?

任何帮助将不胜感激!

提前致谢!

回溯:

   Rendered customer/carts/show.html.erb within layouts/application (6.6ms)
   2016-06-18T07:40:46.046130+00:00 app[web.1]: Completed 500 Internal Server                  Error in 27ms (ActiveRecord: 16.5ms)
   2016-06-18T07:40:46.047088+00:00 app[web.1]: 
   2016-06-18T07:40:46.047099+00:00 app[web.1]:     38: 
   2016-06-18T07:40:46.047097+00:00 app[web.1]: ActionView::Template::Error     (undefined method `model_name' for nil:NilClass):
   2016-06-18T07:40:46.047098+00:00 app[web.1]:     37:       <%= button_to          'Empty cart', @cart, action: 'destroy', method: :delete, data: { confirm: 'Are you   sure?' }, class: 'btn btn-default empty_cart btn_stand' %><br>
   2016-06-18T07:40:46.047101+00:00 app[web.1]:     41:       <%= hidden_field_tag :size, value: :size %>
   2016-06-18T07:40:46.047100+00:00 app[web.1]:     39:       <%= form_tag APP_CONFIG[:paypal_url] do %>
   2016-06-18T07:40:46.047100+00:00 app[web.1]:     40:       <%= fields_for LineItem.find_by(params[:id]) do %>
   2016-06-18T07:40:46.047101+00:00 app[web.1]:     42:       <%= hidden_field_tag :color, value: :color %>
   2016-06-18T07:40:46.047104+00:00 app[web.1]: 
   2016-06-18T07:40:46.047103+00:00 app[web.1]:   app/views/customer/carts/show.html.erb:39:in `_app_views_customer_carts_show_html_erb__1117899742375249126_70196778419380'
   2016-06-18T07:40:46.047102+00:00 app[web.1]:     43:       <% end %>
   2016-06-18T07:40:46.047103+00:00 app[web.1]:   app/views/customer/carts/show.html.erb:40:in `block in _app_views_customer_carts_show_html_erb__1117899742375249126_70196778419380'

1 个答案:

答案 0 :(得分:0)

<强>更新

我想我已经找到了你遇到的问题。您可以查看@cart变量的值,因为它似乎是nil。你可以发布你的控制器来实例化你的@cart吗?

以前的答案

我不完全确定,但是当你这样做时会发生什么:

development: &default
  paypal_email: xxxxx@xxxx.com
  paypal_secret: xxxxxx
  paypal_cert_id: XXXXXXXXXXXXX
  paypal_url: "https://www.sandbox.paypal.com/cgi-bin/webscr"

test:
  <<: *default

production:
  <<: *default

另外,你真的不需要漂亮的配置生成器,Rails已经提供了一种方便的加载ENV依赖配置的方法

#{Your Application Name}::Application.config_for(:app_config)

甚至更好,您可以使用Figaro进行配置

<强>更新

要使用rails提供的配置方法,您可以使用以下内容:

#config/initializers/paypal_config.rb
PaypalConfig = #{Your Application Name}::Application.config_for(:app_config)

无论您何时需要配置,现在都可以使用:

PaypalConfig[:paypal_url] #instead of the APP_CONFIG