为什么我的rails控制器/表单不会将任何数据保存到我的本地数据库?

时间:2012-05-21 23:26:58

标签: ruby-on-rails database forms model controller

我是Ruby on Rails的新手,作为我的第一个项目,我正在为我的创业公司创建一个beta注册页面。我只想将用户的电子邮件地址保存到数据库以备将来使用,我无法将任何数据保存到我的数据库中。我可以通过rails控制台添加电子邮件,但我的表单/控制器无法正常工作。怎么了?

用户模型:

class User < ActiveRecord::Base
  attr_accessible :email

  before_save { |user| user.email = email.downcase }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness:
 {case_sensitive: false }

end

用户控制器:

class UsersController < ApplicationController


  def index

  end



  def create
    User.create params[:email]

    redirect_to :back, :notice => "Success!"


  end

end

首页HTML:

<h1>######</h1>
<p>Welcome to #####! Give us your email address, and we'll keep you informed on our
latest happenings.
You'll also be placed on the list for our private alpha and beta testings.</p>

<%= render 'form' %>

表格部分:

<%= form_for User.new do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.submit %>
<% end %>

谢谢!

2 个答案:

答案 0 :(得分:3)

首先,创建params[:user]而不是params[:email]的用户。如果您只想要电子邮件地址,请添加params[:user][:email]

这是因为params是一个嵌套的哈希,看起来像这样: params[:user] = { email: "name@example.com" }

其次,如果电子邮件地址未通过验证且未保存,则使用条件逻辑。

@user = User.new(params[:user])
if @user.save
  redirect_to :back, :notice => "Success!"
else
  # display error messages
end

或者如果你想获得详细信息:

@user = User.new(:email => params[:user][:email])

答案 1 :(得分:2)

这是错误的:

User.create params[:email]

应该是:

User.create params[:user]