Ruby on Rails - 基本表单提交

时间:2015-08-19 05:57:49

标签: mysql ruby-on-rails ruby

我一直在研究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

4 个答案:

答案 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确切地允许哪些参数进入我们的控制器动作。

由于