RoR: как мне создать поиск "действительный код регистрации"? - PullRequest
1 голос
/ 26 апреля 2009

Я хочу иметь возможность давать коды потенциальным пользователям в виде ссылок электронной почты (например, mysite.com/signup?beta=rapunzel)

Когда кто-то нажимает на ссылку, она заполняет поле hidden_ ​​значением (просто будет работать: params [: beta]?)

Затем, прежде чем создать пользователя, он проверяет, сверяясь с другой таблицей, в которой у меня другой бета-код.

Затем идет и сохраняет какой код или, возможно, только beta.id.

Предложения? Плагин уже существует?

Спасибо.

Ответы [ 3 ]

1 голос
/ 26 апреля 2009

Какие параметры вы получите из своего 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

Затем, когда они зарегистрируются и создадут правильный идентификатор, вы, вероятно, захотите подключить ассоциацию от их строки в таблице пользователя к строке, содержащей идентификатор беты в таблице «бета». Это может быть ассоциация has_one в бета-таблице, если вы хотите разрешить одному пользователю регистрироваться под каждым бета-идентификатором, или has_many, если несколько человек могут зарегистрироваться в ней.

1 голос
/ 27 апреля 2009

Я бы сделал это с проверкой.

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 голос
/ 26 апреля 2009

Когда ваш пользователь нажимает на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...