2009-04-26 2 views
1

이메일 링크 (예 : mysite.com/signup?beta=rapunzel) 형태로 잠재 사용자에게 코드를 제공하고 싶습니다.RoR : "유효한 가입 코드"조회는 어떻게 만듭니 까?

누군가가 링크를 클릭하면 hidden_field에 값 그냥 : params [: beta] work?)

그런 다음 사용자를 생성하기 전에 다른 베타 코드가있는 다른 테이블을 확인하여 유효성을 검사합니다.

그런 다음 어떤 코드 또는 단지 beta.id를 저장합니다.

제안 사항? 플러그인이 이미 존재합니까?

감사합니다.

답변

1

사용자가 mysite.com/signup을 클릭하면 해당 경로와 연관된 작업의 값은 "rapunzel"이 params [: beta]에 저장됩니다. 인스턴스 변수 (@beta)에 할당하여 뷰에 전달하고 계획대로 숨겨진 필드를 통해 사용자 컨트롤러로 다시 전달한 다음 사용자 개체를 저장하기 전에이를 테이블과 비교할 수 있습니다.

또는 당신은 그들 만이 유효한 베타 코드에 전달하는 경우에 당신은 특별한 양식 필드가 필요하지 않을 경우 사용자가 모든 가입 페이지로 이동이 허용 될 수 있습니다 :

def signup 
    unless BetaCode.find_by_code(params[:beta]) 
    flash[:notice] = "You can't sign up without a beta code!" 
    redirect_to root_path 
    end 
end 
+0

아입니다. 따라서 모델은 베타 값이 다른 여러 행 (예 : BetaCode.id 및 BetaCode)이있는 베타 코드입니다.베타) 및 "unless"절이 모든 값을 검사하고 찾지 못하면 잘못된 가입 페이지가됩니까? – Angela

+0

맞습니다. "if! clause"와 같지 않으면. 그것은 루비의 꽤나 혼란스런 관용구 중 하나이며, 많은 사람들이 그런 이유로 사용하지 않습니다. 그것은 개인적인 스타일입니다. :) 그리고 네, 원래 질문에 대한 설명에서 BetaCode를 구상 한 것입니다 : "id"와 "code"행이있는 유효한 베타 코드가있는 항목 테이블. 당신이 실제로 어떻게하는지는 물론 당신에게 달려 있습니다. Daemin의 has_one 제안은 꽤 좋은 것입니다. – Raphomet

1

을 URL에서 벗어나는 매개 변수는 경로 설정 방법에 따라 다릅니다. 이 같은 링크를 보낼 수

map.connect '/signup/:beta', :controller => 'signup', :action => 'beta' 

: 당신이 당신의 경로를 지정하는 경우

params[:beta] = "rapunzel" 

을 : 현재 경로를 사용하면 얻을 것 mysite.com/signup/rapunzel 대신 당신은 얻을 것이다 베타 매개 변수는 이전과 동일합니다.

양식에 베타 필드를 가져 오려면 양식 페이지 템플릿의 숨겨진 필드로 포함하십시오. 그들이 제휴 프로그램에 가입하고 아마에 후크 할 수 있습니다 적절한 ID를 만들 다음

hidden_field_tag 'beta', @beta_id 

: 뷰 템플릿 넣어에서 다음

@beta_id = params[:beta] 

: 같은 컨트롤러 넣어 뭔가에

사용자 테이블의 해당 행에서 "베타"테이블의 베타 ID를 포함하는 행으로 연결됩니다. 단일 사용자가 각 베타 ID에 등록 할 수 있도록 허용하려는 경우 베타 테이블에 has_one 연관이 될 수 있으며 여러 사람이 가입 할 수있는 경우 has_many를 사용할 수 있습니다.

+0

안녕, 괜찮아, 멋지다 ... 나는 has_many 협회가 내가 찾고있는 것 같아 ... 그래서 내가 베타 .id를 하나의 열로, 베타 베타를 다른 것으로 (?) 만든다. 수표를 만들기 위해 유효성 확인을 만들거나 유효한지 어떻게 확인합니까? – Angela

+0

예, 유효성 검사를 사용하여 베타 ID가 유효한지 확인할 수 있습니다. 새 사용자가 등록 될 때 실행되는 유효성 검사로 추가 될 수 있습니다. 더 안전하게하기 위해 (베타 계정을 만들 수 없도록) 컨트롤러에 추가하고 모델에 대한 유효성 검사를 추가합니다. – Daemin

1

나는 이것을 검증했을 것입니다. 양식에서

class User < ActiveRecord::Base 
    validate_on_create {|r| 
    beta_code = BetaCode.find_by_code(r.beta_code) 

    beta_code && beta_code.destroy || 
     r.errors.add(beta_code, "is invalid") 
    } 

    attr_accessor :beta_code 
end 

는 :

<% form_for(@user) do |f| %> 
    # fields... 
    <%= f.text_field :beta_code %> 
<% end %> 

이것은 당신이 그 테이블 베타 코드의 목록을 포함하는 BetaCode 모델을 가지고 있다고 가정합니다.

+1

_definitely_ 사용자 개체가 저장 될 때마다가 아니라 생성시이 유효성 검사 만 수행하려고합니다. 그렇지 않으면 좋은 접근 방식입니다. –

+0

좋은 지적, 스 니펫을 업데이트했습니다. –

관련 문제