이 방법이 작동하는지 확인했습니다. 기본적으로 컨트롤러에서 전자 메일을 가져 와서 특정 사용자의 전자 메일을 변경합니다.모델/ActiveRecord가 새 데이터를 저장하지 않음
그러나 실제로 데이터를 저장하지 않습니다. 잘못된 전자 메일 형식을 전달하고 올바른 전자 메일 메서드를 전달하면 false를 반환하고 true를 반환하면 새 전자 메일이 할당되고 안전함이 호출됩니다.
# Allows user to change email address
def change_email(newmail)
address = EmailVeracity::Address.new(newmail)
if address.valid?
self.email = newmail
self.save
return true
else
return false
end
end
나는 어떤 힌트 먼저 로그를 확인하지만 아무것도 내가 가진 전부는 없다 :
Started POST "/members/editmail" for 127.0.0.1 at 2013-04-25 17:33:44 +0200
Processing by MembersController#editmail as HTML
Parameters: {"authenticity_token"=>"*****=", "mail"=>"*****@gmail.com"}
←[1m←[35mUser Load (1.0ms)←[0m SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
←[1m←[36mCharacter Load (0.0ms)←[0m ←[1mSELECT `characters`.* FROM `characters` WHERE `characters`.`user_id` = 1←[0m
←[1m←[35m (0.0ms)←[0m BEGIN
←[1m←[36mUser Exists (0.0ms)←[0m ←[1mSELECT 1 FROM `users` WHERE (`users`.`email` = BINARY '*****@gmail.com' AND `users`.`id` != 1) LIMIT 1←[0m
←[1m←[35mUser Exists (0.0ms)←[0m SELECT 1 FROM `users` WHERE (`users`.`username` = BINARY '******' AND `users`.`id` != 1) LIMIT 1
←[1m←[36m (0.0ms)←[0m ←[1mROLLBACK←[0m
Redirected to http://localhost:3000/members/1
Completed 302 Found in 10ms (ActiveRecord: 1.0ms)
은 또한이 속성을 변경하는 방법이 훨씬 의미가 없습니다. 인증을 위해 Devise gem을 사용하기 때문에
current_user
변수를 사용하여 현재 로그인 한 사용자의 User 객체를 검색 한 다음 컨트롤러에
current_user.email = newmail; current_user.save
을 호출하면됩니다.
감사합니다. self.save! 도와 줬어. 내 Devise User 모델에 추가 검증에 오류가있는 것 같습니다. –