爲我的Ruby on Rails應用程序工作一個簡單的自定義驗證部分。我試圖在用戶嚮應用程序註冊時創建電子郵件,但當我嘗試註冊過程時,數據庫中創建了一條記錄,但電子郵件設置爲零。下面是一些代碼:Ruby on Rails - 字段設置爲無
我的模型:
class User < ActiveRecord::Base
attr_accessor :email, :password, :password_confirmation
before_save :encrypt
validates :password,
:presence => true,
:confirmation => true
validates :email,
:presence => true,
:uniqueness => true,
:format => { :with => /^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,}\z$/ }
def encrypt
if password.present?
self.password_salt = BCrypt::Engine.generate_salt
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
end
def self.authenticate(email, password)
user = find_by_email(email)
if user && user.password_hash = BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
end
我的控制器:
class UsersController < ApplicationController
skip_filter :login_required, :only => [:create, :new]
def new
@user = User.new
render :layout => 'unauthenticated'
end
def create
@user = User.new(params[:user])
@user.last_login = DateTime.now
@user.is_active = true
if @user.save
session[:user_id] = @user.id
redirect_to root_url
else
render :action => :new
end
end
end
的觀點:
<div id="register">
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div class="error">
<ul>
<% for message in @user.errors.full_messages %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<ul>
<li>
<%= f.label :email %>
<%= f.text_field :email %>
</li>
<li>
<%= f.label :password %>
<%= f.password_field :password %>
</li>
<li>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %>
</li>
<li>
<%= f.submit 'Register' %>
</li>
</ul>
<% end %>
</div>
無論出於何種原因,該電子郵件被設爲零每次用戶已註冊。唯一看起來像處理電子郵件的是視圖上的字段和驗證,所以我不知道驗證是否可以剝離它並且不會拋出任何錯誤。
:login_required方法位於我的application_controller中,並且是一個檢查以確保用戶登錄進行會話。 skip_filter的目的是在登錄和註冊頁面時不檢查。
任何想法?提前致謝。
在創建方法開始時檢查你的'params'變量。 –