0

私は Ruby on Rails を初めて使用し、最初のプロジェクトとして、スタートアップのベータ サインアップ ページを作成しています。将来の使用のためにユーザーの電子メールアドレスをデータベースに保存したいだけですが、データベースにデータを保持することはできません。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 %>

ありがとう!

4

2 に答える 2

3

まず、params[:user]notでユーザーを作成します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])
于 2012-05-21T23:43:27.597 に答える
2

これは間違っています:

User.create params[:email]

そのはず:

User.create params[:user]
于 2012-05-21T23:36:14.213 に答える