form_for:nil的未定义方法`new':NilClass

时间:2015-01-21 03:28:38

标签: ruby-on-rails gem null form-for

事情一直很好,但我刚刚通过bundle update更新了宝石,现在我的/register页面显示错误:

  用户中的

NoMethodError#new_signup
  未定义的方法`new'为零:NilClass

enter image description here

错误位于视图中的form_for行。 这是users_controller的操作:

def new_signup
  @user = User.new
  @user.practice = Practice.new
  render :layout => 'login'
end

这里是视图new_signup.html.erb

<h1>Sign Up</h1>
<%= form_for @user, url: '/register' do |f| %>
  ...
<% end %>

要澄清new_signupusers_controller /register routes.rb Rails.application.routes.draw do get 'register', to: 'users#new_signup', as: 'register' post 'register', to: 'users#create_signup' ... end 行动form_for User.new url: '/register' do |f|行动:

abort @user.inspect

这有什么不对吗?我甚至可以调试什么?我已经尝试将 form_for 更改为bundle update并没有帮助。

我已经完成了$ bundle update Fetching gem metadata from https://rubygems.org/............ Resolving dependencies... Installing rake 10.4.2 (was 10.3.2) Installing i18n 0.7.0 (was 0.6.11) Installing json 1.8.2 (was 1.8.1) Installing minitest 5.5.1 (was 5.4.2) Using thread_safe 0.3.4 Using tzinfo 1.2.2 Using activesupport 4.1.1 Using builder 3.2.2 Using erubis 2.7.0 Using actionview 4.1.1 Using rack 1.5.2 Installing rack-test 0.6.3 (was 0.6.2) Using actionpack 4.1.1 Using mime-types 1.25.1 Using polyglot 0.3.5 Using treetop 1.4.15 Using mail 2.5.4 Using actionmailer 4.1.1 Using activemodel 4.1.1 Using arel 5.0.1.20140414130214 Using activerecord 4.1.1 Using encryptor 1.3.0 Using attr_encrypted 1.3.3 Installing bcrypt 3.1.9 (was 3.1.7) Using bundler 1.7.3 Using chronic 0.10.2 Using coffee-script-source 1.8.0 Installing execjs 2.2.2 (was 2.2.1) Using coffee-script 2.3.0 Using thor 0.19.1 Using railties 4.1.1 Using coffee-rails 4.0.1 Installing hashie 3.3.2 (was 3.3.1) Using hike 1.2.3 Using multi_json 1.10.1 Installing jbuilder 2.2.6 (was 2.2.1) Using jquery-rails 3.1.2 Installing pg 0.18.1 (was 0.17.1) Using tilt 1.4.1 Installing sprockets 2.12.3 (was 2.11.0) Installing sprockets-rails 2.2.2 (was 2.1.4) Using rails 4.1.1 Installing rdoc 4.2.0 (was 4.1.2) Using sass 3.2.19 Installing sass-rails 4.0.5 (was 4.0.3) Installing valuable 0.9.9 (was 0.9.8) Installing schema_plus 1.8.4 (was 1.6.0) Using sdoc 0.4.1 Installing spring 1.2.0 (was 1.1.3) Installing turbolinks 2.5.3 (was 2.4.0) Installing uglifier 2.7.0 (was 2.5.3) Using whenever 0.9.4 Updating files in vendor/cache * rake-10.4.2.gem * i18n-0.7.0.gem * json-1.8.2.gem * minitest-5.5.1.gem * rack-test-0.6.3.gem * bcrypt-3.1.9.gem * execjs-2.2.2.gem * hashie-3.3.2.gem * jbuilder-2.2.6.gem * pg-0.18.1.gem * sprockets-2.12.3.gem * sprockets-rails-2.2.2.gem * rdoc-4.2.0.gem * sass-rails-4.0.5.gem * valuable-0.9.9.gem * schema_plus-1.8.4.gem * spring-1.2.0.gem * turbolinks-2.5.3.gem * uglifier-2.7.0.gem Removing outdated .gem files from vendor/cache * spring-1.1.3.gem * uglifier-2.5.3.gem * json-1.8.1.gem * rake-10.3.2.gem * schema_plus-1.6.0.gem * pg-0.17.1.gem * rack-test-0.6.2.gem * sass-rails-4.0.3.gem * turbolinks-2.4.0.gem * execjs-2.2.1.gem * bcrypt-3.1.7.gem * hashie-3.3.1.gem * i18n-0.6.11.gem * rdoc-4.1.2.gem * minitest-5.4.2.gem * valuable-0.9.8.gem * jbuilder-2.2.1.gem * sprockets-2.11.0.gem * sprockets-rails-2.1.4.gem Your bundle is updated! ,它会返回我模型中所有字段的空哈希值。这似乎就是 输出的内容。< / p>

这是form_for

的输出
new

更新1:

我已按照下面的Jay's process尝试通过控制台创建用户。这样做很好,但是这个错误仍然存​​在。

更新2:

仍然没有运气。我已经安装了更好的错误,而且我正在查看完整堆栈跟踪。该错误似乎出现在@user帮助器中,因为它试图实例化User类的表单,它并不认为它具有new方法。

由于{{1}}实例变量已经是用户的新实例,因此它没有{{1}}方法是否有意义?

我已经将跟踪转储到JSFiddle中了(显然链接不是可点击的,所以我为Full Trace的前三项创建了一个小提琴):

enter image description here

3 个答案:

答案 0 :(得分:1)

Turgs,

你的代码看起来很好,它应该是以前工作的红旗,而不是在更新你的Gemfile.lock之后。您的错误表明User ActiveRecord对象存在问题。

我会做的事情:

1。)杀死本地服务器并重新启动它。有时事情变得奇怪;重新开始。

2.)检查你的schema.rb。它是否具有您期望的所有表格和列?

3.打开rails c并输入用户。你在schema.rb中得到了它对应的字段吗?如果没有,您需要开始与数据库建立连接。

4.)尝试创建用户。使用bang方法User.create!(required_attributes_here)这将给出一个很好的回溯。我希望它会失败。

5.。)您使用的数据库是什么?检查控制台中的数据库,确保db名称与database.yml文件中的名称相匹配。

6。)如果可以,请做一个rake db:yolo; IE浏览器。 rake db:drop,rake db:create,rake db:migrate,rake db:seed(last是可选的)。

希望这可以为您提供更多线索/解决问题。

答案 1 :(得分:0)

我想,这完全是关于form_for帮助器的。 尝试明确地将URL设置为路径,例如:

<%= form_for @user, url: signup_path, html: { method: :post } do |f| %>

并编辑routes.rb:

post 'register', to: 'users#create_signup', as: 'signup'

希望它有所帮助。

当您尝试加载/注册页面或提交时,是否会发生错误?

答案 2 :(得分:0)

错误是由于gemfile设置造成的。

Rails已被锁定&#34;版本 4.1.1 ,而其他宝石可以自由更新到他们想要的任何版本。

更新我的gemfile以便使用的Rails版本是 4.1.9 并重新启动应用程序已修复此问题。