【问题标题】:Why isn't my rails controller/form persisting any data to my local database?为什么我的 Rails 控制器/表单没有将任何数据保存到我的本地数据库?
【发布时间】:2012-05-21 23:26:57
【问题描述】:

我是 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 %>

谢谢!

【问题讨论】:

  • 在您点击提交后将 webrick 输出中的行粘贴到终端窗口中并告诉我它说了什么。我相信问题是唯一性:是的。你错过了真正的

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


【解决方案1】:

首先,使用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])

【讨论】:

    【解决方案2】:

    这是错误的:

    User.create params[:email]
    

    应该是:

    User.create params[:user]
    

    【讨论】:

    • 成功了。我会尽快接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2015-02-05
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多