我一直在研究PHP。目前正在尝试学习Ruby on Rails。我正在网上学习Rails,现在我很难停止注册或者可以说一个表单提交页面。对不起,如果它太傻了。
错误是:
undefined method new for nil:NilClass
以下是代码:
users_controller.rb
class UsersController < ApplicationController
def new
@user= User.new
end
def create
@user.new(params[:user])
if @user.save
flash[:notice]= "you signed up successfully"
flash[:color]= "valid"
else
flash[:notice]= "failed"
flash[:color]="invalid"
end
render "new"
end
end
new.html.erb
<% page_title="Signup" %>
<div class="Sign_Form">
<h1>Sign up</h1>
<%= form_for(:user, :url => {:controller => 'users', :action => 'create'}) do |f| %>
<p> Username:</br> <%= f.text_field :username%> </p>
<p> Email:</br> <%= f.text_field :email%> </p>
<p> Password:</br> <%= f.password_field :password%></p>
<p> Password Confirmation:</br> <%= f.password_field :password_confirmation%> </p>
<%= f.submit :Signup %>
<% end %>
<% if @user.errors.any? %>
<ul class="Signup_Errors">
<% for message_error in @user.errors.full_messages %>
<li>* <%= message_error %></li>
<% end %>
</ul>
<% end %>
</div>
user.rb
class User < ActiveRecord::Base
attr_accessor :password
EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
validates :username, :presence => true, :uniqueness => true, :length => { :in => 3..20 }
validates :email, :presence => true, :uniqueness => true #:format => EMAIL_REGEX
validates :password, `enter code here`:presence =>true #:confirmation => true #password_confirmation attr
validates_length_of :password, :in => 6..20, :on => :create
end
答案 0 :(得分:1)
在 users_controller &gt;中创建,您将大写字母放在User
param。
对于您的情况,它应该全部为小写params[:user]
。
旁注,它实际上取决于您首先在表单上设置的属性名称。
编辑:
除此之外,你应该放@user = User.new(params[:user])
答案 1 :(得分:1)
首先应该创建User类的新对象 第二遍正确的params键
将create method中的第一行更改为
@user = User.new(params[:user])
因此更改后的代码如下所示:
class UsersController < ApplicationController
def new
@user= User.new
end
def create
@user = User.new(params[:user])
if @user.save
flash[:notice]= "you signed up successfully"
flash[:color]= "valid"
else
flash[:notice]= "failed"
flash[:color]="invalid"
end
render "new"
end
end
答案 2 :(得分:0)
将@user.new(params[:user])
更改为@user = User.new(params[:user])
我创建@user但它尚未保存到数据库。在@user.save
下面的行,即保存时。并删除render new
,因为它将渲染模板而不设置模板所需的变量。而是使用redirect_to :new
将用户发送给新用户并设置所需的变量
答案 3 :(得分:0)
我想您需要在params
控制器中允许User
User
模型,以避免提及forbidden error message
here。请注意,这是提到的Rails功能
Rails有几个安全功能可以帮助您编写安全的应用程序,现在您正在遇到其中一个。这个被称为强参数,这要求我们告诉Rails确切地允许哪些参数进入我们的控制器动作。
由于