rails 5 перенаправлений динамической маршрутизации на основе атрибутов модели - PullRequest
0 голосов
/ 22 мая 2018

У меня есть следующие ресурсы

Places (:place_id, :name, :shortlink, :token)

Events (:event_id, :address)

У меня ограниченная регистрация пользователя с вложенным пользовательским ресурсом (у пользователя много событий).

Когда пользователь регистрируется, он (а) создает новое событие со столбцом ссылочного места.

Пользователи могут зарегистрироваться только при наличии этих параметров в URL

https://mysite/user/signup?q=[:place_id]&t=[:token] # идентификатор места должен существовать, маркер места должен быть равен параметру t

before_action :check_has_access, only: [:new]
...
protected

def check_has_access
  @place = Place.find(params[:q])
   if params[:q].blank? && @place.blank? || params[:t].blank? || @place.token != params[:t]
     redirect_to(root_path)
     flash[:alert] = 'Restricted sign-up'
   end
end

Я хочу создать ярлык для каждого места для регистрации пользователем

https://mysite/[:shortlink] # place.shortlink

Это будет перенаправлять на заданную форму регистрации с соответствующей заполненной формой и ограниченными параметрами, чтобы пользователь, имеющий прямой URL, мог зарегистрироваться.

https://mysite/user/signup?q=[:place_id]&t=[:token]

Как мне создать маршруты?

Дополнительный вопрос, правильно ли я делаю?

1 Ответ

0 голосов
/ 22 мая 2018

Нашли решение по этому посту здесь .

Мне нужно перезапустить сервер, чтобы вновь созданный маршрут загружался после создания объекта Place.Не уверен, что я все делаю правильно, но это работает ..

#config/route.rb

 Rails.application.routes.draw do
    Place.all.each do |pl|
         get "/#{pl.shortlink}" => redirect("/users/sign_up?q=#{pl.id}&t=#{pl.token}")
       end
    end

Чтобы загрузить недавно созданный маршрут при добавлении места, я добавил

#models/place.rb

after_create :add_shortlink
...
  def add_shortlink
  Rails.application.reload_routes!
end

Это не будет работать на Heroku, проблема решена здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...