문제

나는 Ruby on Rails에 아주 익숙하지 않으므로 저와 함께 부탁하십시오 :)

레일에서 가져온 .CSV 파일을 처리하고 있으며 프로그래밍 방식으로 새로운 사용자를 만들고 싶습니다 (역할 요구 사항과 함께 AuthLogic GEM을 사용하고 있음).

예제 라인 :

Steve.Jobs@apple.com, Steve, Jobs, 555-APPLE

암호:

  def new_user(line)
    params = Hash.new
    params[:user] = Hash.new
    params[:user]["email"] = line[0]
    params[:user]["first_name"] = line[1]
    params[:user]["last_name"] = line[3]
    params[:user]["phone"] = line[4]
    user = User.new(params[:user])
    user.save
  end

문제는 새로운 사용자를 추가하지 않고 실패하지만 실패한다는 것입니다 (DB 시작 후 롤백이 뒤 따릅니다). 로그인, 비밀번호 등과 같은 모든 필드를 채우지 않기 때문에 가정합니다.

이 필드에 대한 값을 명시 적으로 생성해야합니까?

도움이 되었습니까?

해결책 2

좋아, 그래서 나는 내 자신의 질문에 대답 할 수 있었지만 가장 이상적인 방법은 아니지만 :

 def new_user(line)
    params = Hash.new
    params[:user] = Hash.new
    params[:user]["email"] = line[0]
    params[:user]["first_name"] = line[1]
    params[:user]["last_name"] = line[2]
    params[:user]["phone"] = line[3]
    #generate random password of length 6
    password = ActiveSupport::SecureRandom.base64(6) 
    #generate username by adding first and last name + 3 random characters
    username = (line[1] + line[2])
    username = username + ActiveSupport::SecureRandom.base64(3)
    params[:user]["login"] = username
    params[:user]["password"] = password
    params[:user]["password_confirmation"] = password

    #check to see if user already exists
    @existing_user = User.find_by_email(line[0])

    if(@existing_user)
      #user exists
      #do nothing
    else
      #user is brand new
      @new_user = User.new(params[:user])
      @new_user.reset_persistence_token
      if(@new_user.save)
        @new_user = User.find_by_email(line[0])
        #user saved successfully
      else
        #a problem occurred
        flash[:errors] = @new_user.errors
      end
    end
  end 

다른 팁

나는 어제이 같은 문제를 발견했다. 나는 Oauth Addon을 사용하고 있지만 로그인/이메일은 필드가 필요하지 않습니다.

user.reset_persistence_token

사용자에게 전화하기 직전

그것이 조금 도움이되기를 바랍니다. 더 깨끗한 방법을 찾는 것이 좋을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top