2013-08-18 10 views
0

Здравствуйте я знаю, что это общая проблема, но я не могу позволить ей работать .. Мне нужно активировать аккаунт из электронной почты ссылки .. URL выглядит http://domain.tld/activation/[email protected]/d4sa89dsa98 и я хочу доступ, что параметры из контроллера :-)Rails Params в URL

routes.rb

match "activation/:email/:activation_key" => "frontend#activation", :via => :get 

frontend_controller.rb

def activation 
    @user = User.find(:conditions => {:email => params[:email], activation_key => params[:activation_key]}) 
    render "activation" 
    end 

и им получать ошибок

No route matches [GET] "/activation/[email protected]/a46d4sa8dsa68d" 

мой activation.html.erb

<% if @user %> 
Activation successful. 
<% else %> 
Activation key is invalid. 
<% end %> 

EDIT: ------------------ -------------------------------------------------- -------------------------------------------------- -----

Я заменил: параметр электронной почты: параметр id, потому что он выглядит лучше, im not если Array.new(32){Random.new.rand(36).to_s(36)}.join - уникальная строка, но это не имеет значения сейчас.

маршрут

match "activation/:id/:activation_key" => "frontend#activation", :via => :get 

рейк маршруты

GET /activation/:id/:activation_key(.:format) frontend#activation 

контроллер внешнего интерфейса

def activation 
    @user = User.find(:conditions => {:id => params[:id], :activation_key => params[:activation_key]}) 
    render "activation" 
    end 

ошибка

Couldn't find User without an ID 

но РАБОТЫ поэтому проблема находится в состоянии

@user = User.find(params[:id]) 

РЕШЕНИЕ

@user = User.find(:first, :conditions => {:id => params[:id], :activation_key => params[:activation_key]}) 
+1

Почему у вас есть электронная почта? Я этого раньше не видел. Я бы использовал только ключ активации, если бы был вами. – Mischa

+0

Вы абсолютно правы, я не был уверен в уникальности этого генератора, поэтому я добавляю электронное письмо, но идентификатор пользователя будет лучше, или я могу использовать 'SecureRandom.uuid' .. я изменил: email: id, но теперь он говорит' Couldn ' t найти пользователя без ID', что означает 'params [: id]' doesnt work .. я отредактирую вопрос для получения дополнительной информации – Muflix

ответ

3

вы пробовали добавить constraints: { email: /[^\/]+/ } в свой match аргумент? Возможно, . съедается чрезмерно жадным регулярным выражением.

+0

Привет, спасибо, я заменил адрес электронной почты для id .. пожалуйста, посмотрите отредактированный вопрос – Muflix