事情一直很好,但我刚刚通过bundle update
更新了宝石,现在我的/register
页面显示错误:
用户中的NoMethodError#new_signup
未定义的方法`new'为零:NilClass
错误位于视图中的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_signup
行users_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的前三项创建了一个小提琴):
答案 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 并重新启动应用程序已修复此问题。