1

電子メール リンクの形式で潜在的なユーザーにコードを提供できるようにしたい (例: mysite.com/signup?beta=rapunzel)

誰かがリンクをクリックすると、hidden_​​field に値が入力されます (:params[:beta] を使用するだけで機能しますか?)

次に、ユーザーを作成する前に、別のベータコードを持つ別のテーブルと照合して検証します。

次に、どのコードまたはおそらく beta.id だけを保存します。

提案?プラグインは既に存在しますか?

ありがとう。

4

3 に答える 3

1

ユーザーがmysite.com/signupにアクセスすると、そのルートに関連付けられたアクションの値は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
于 2009-04-26T03:25:46.680 に答える
1

URLから取得するパラメータは、ルートの設定方法によって異なります。現在のルートでは、次のようになります。

params[:beta] = "rapunzel"

ルートを次のように指定した場合:

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

代わりにmysite.com/signup/rapunzelのようなリンクを送信すると、以前と同じベータパラメータを取得できます。

ベータフィールドをフォームに追加するには、フォームページテンプレートの非表示フィールドとしてベータフィールドを含めるだけです。

コントローラに次のように入力します。

@beta_id = params[:beta]

次に、ビューテンプレートに次のように配置します。

hidden_field_tag 'beta', @beta_id

次に、サインアップして適切なIDを作成するときに、ユーザーのテーブルの行から「ベータ」テーブルのベータIDを含む行への関連付けをフックする必要があります。これは、1人のユーザーだけが各ベータIDに登録できるようにする場合は、ベータテーブルのhas_oneアソシエーションであり、複数のユーザーがサインアップできる場合は、has_manyです。

于 2009-04-26T03:25:58.553 に答える
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 モデルがあることを前提としています。

于 2009-04-27T07:25:19.233 に答える