문제

여기에 단일 문제가 있는지 확실하지 않거나 잘못된 방식으로 이것에 접근했는지 확실하지 않지만 제안은 크게 감사 할 것입니다!

응용 프로그램에서 사용자가 가입 할 때 권한을 얻고 페이지가 설정되면 동료를 이메일로 초대 할 수 있습니다.

이메일에는 끝에 활성화 코드가 태그가 지정되어 있습니다. 예제 URL은 "/user/new/xxxxxxxxx".

문제는 다음과 같습니다. 기본 정보만으로 동료가 사용자 계정을 만들 수 있으므로 계정에 로그인하여 앱 코너를 설정할 수 있습니다.

동료가 사용자 가입 양식에 실수를 할 때 URL은 활성화 코드가 있다는 것을 잊어 버리고 유효성 검사 메시지와 '/사용자'의 끔찍한 URL로 뒤로 이동합니다. 동료가 실수를 수정하고 클릭으로 가입하면 초대 된 동료가 아닌 온전한 사용자로 제출됩니다.

'사용자/새'페이지에 IF 조항이 있기 때문에 이것은 발생합니다.

<% if @activation_code %>
  Show colleague messages of invitation and happiness
<% else %>
  Show fully fledged user ego stroking messages
<% end %>

URL의 코드 매개 변수를 찾는 라우팅은 다음과 같습니다.

map.signup '/users/new/:code', :controller => 'users', :action => 'new', :code => nil

내가 전에 말했듯이, 나는 이것에 완전히 잘못 접근 했습니까? 여기에 한 가지 문제가 있습니까?

업데이트이 레일 캐스트 에피소드는 내가 가진 거의 모든 문제를 해결했습니다. 베타 초대장

사람이 초대에서 왔는지 여부를 구별하기 위해서는이 조건 블록을 사용했습니다.

if !@user.invitation_id.blank?

그리고 그것은 훌륭하게 작동했습니다.

도움이 되었습니까?

해결책

나는 당신의 컨트롤러가 다음과 같이 보인다고 생각합니다.

def create
  if @user = User.create(params[:user]) && @user.new_record?
    #take the user to where you want them to go
  else
    #there was an error
    flash[:error] = "Oops, blah blah blah"
    render :action => "new"
  end
end

문제는 더 이상보기에 @Activation_code가 없다는 것입니다. 따라서 Activation_code를 숨겨진 양식 필드로 다시 전달하는 것이 좋습니다.

def create
  @activation_code = params[:activation_code]
  if @user = User.create(params[:user]) && @user.new_record?
    #take the user to where you want them to go
  else
    #there was an error
    flash[:error] = "Oops, blah blah blah"
    render :action => "new"
  end
end

이 방법으로 행동에서 "새"보기를 렌더링 할 때 귀하의보기에는 여전히 적절한 조건부 요소를 렌더링하는 데 도움이되는 @Activation_code가 여전히 필요합니다.

다른 팁

확인 코드를 사용하여 페이지를 방문한 후에는 확인 코드를 <input type="hidden" /> Postbacks 사이에 저장되었는지 확인하십시오.

그렇지 않으면 활성화 코드를 포함하려면 가입 양식의 조치를 수정해야합니다. 이 같은:

form_for @user, :url => "/users/new/#{@activation_code}" do |f|
# ...
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top