昨天我問了這樣一個問題,但在我花了幾個小時處理了這個問題之後,我瞭解到,我昨天問的問題不是我遇到的問題。所以,我決定再問一次。驗證僅限於表單中的值
用戶模型:
EMAIL_REGEX = /\A^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$\z/
# Matches -> [email protected] [email protected] [email protected]
# Non-Matches -> [email protected]_d.com he&[email protected] [email protected]#.co.uk
# http://regexlib.com/REDetails.aspx?regexp_id=333
ALL_LETTERS_AND_SINGLE_SPACES = /\A^([a-zA-Z]+\s?)*$\z/
ALL_LETTERS_AND_NUMBERS = /\A^[a-zA-Z0-9]+$\z/
WEBSITE = /\A(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?\z/
# First Name
validates :first_name,
presence: {message: 'First name cannot be blank'},
length: {maximum: 50, message: 'First name cannot be longer than 50 characters'},
format: {with: ALL_LETTERS_AND_SINGLE_SPACES, message: 'First name should contain only letters and single space'}
# Last Name
validates :last_name,
presence: {message: 'Last name cannot be blank'},
length: {maximum: 50, message: 'Last name cannot be longer than 50 characters'},
format: {with: ALL_LETTERS_AND_SINGLE_SPACES, message: 'Last name should contain only letters and single space'}
# Email
validates :email,
presence: {message: 'Email cannot be blank'},
length: {maximum: 100, message: 'Email cannot be longer than 100 characters'},
format: {with: EMAIL_REGEX, message: 'Email is not valid'},
uniqueness: {case_sensitive: false, message: 'This email is already registered'},
confirmation: {message: 'Email address does not match'}
# Password
validates :password_digest,
presence: {message: 'Password cannot be blank'},
length: {minimum: 8, message: 'Password length should be minimum 8 characters'}
# Username
validates :username,
presence: {message: 'Username cannot be blank'},
length: {minimum: 3, message: 'Email cannot be shorter than 3 characters'},
format: {with: ALL_LETTERS_AND_NUMBERS, message: 'Username should contain only letters and numbers'},
uniqueness: {case_sensitive: false, message: 'This username is already in use'}
# Website
validates :website,
format: {with: WEBSITE, message: 'Invalid email format. Make sure you don\'t have http:// in your link'}
# Information
validates :information,
length: {maximum: 100, message: 'Information cannot be longer than 99 characters'}
正如你所看到的,我有我的數據庫中的一些列的驗證。我需要的是在用戶註冊時驗證first_name,last_name,email和password,並在用戶編輯他/她的個人資料設置時驗證first_name,last_name以及網站,信息和用戶名。
但是,rails會自動驗證您的註冊頁面中是否有用戶名字段的所有列。它只是驗證一切。但我不希望Rails在註冊時驗證用戶名或網站。
檔案控制器:
def update
# Find an existing object using form parameters
@profile = User.find_by_id(current_user.id)
# Update the object
if @profile.update_attributes!(settings_profile_params)
# If save succeeds, redirect to itself
redirect_to request.referrer
else
# If save fails, redisplay the form so user can fix the problems
render('edit')
end
end
private # user_params is not an action, that is why it is private.
def settings_profile_params
params.require(:user).permit(:first_name, :last_name, :username, :school, :program, :website, :information)
end
用戶控制器:
def create
# Instantiate a new object using form parameters
@user = User.new(user_params)
# Save the object
if @user.save
# If save succeeds, redirect to the dashboard action
cookies[:authorization_token] = @user.authorization_token
redirect_to dashboard_path
else
# If save fails, redisplay the form so user can fix the problems
render('new')
end
end
private # user_params is not an action, that is why it is private.
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :email_confirmation, :password)
end
我想軌將驗證在強大的參數只有通過者,但事實並非如此。我相信它應該很容易解決,但我不能。
謝謝。
這些都是很好的建議。讓我在他們身上工作一段時間。我希望他們會工作。 – cyonder
事情是我有不同的更新形式。如果您有GitHub帳戶,請檢查設置。我正在嘗試這樣做。要改變密碼,我使用不同的形式,並改變first_name我使用不同的形式。所以,最後我需要以不同的形式驗證它們。所以我不能使用on:create或on:update屬性。這真的很奇怪。爲什麼,軌道沒有驗證我正在嘗試羣發的那些。 – cyonder