Как определить пользовательский URL для страницы подтверждения формы?
Я создаю базовую целевую страницу продукта с помощью Rails, на которой пользователи могут вводить свой адрес электронной почты, чтобы получать уведомления о запуске продукта. (Да, есть сервисы / гемы и т. Д., Которые могли бы сделать это для меня, но я новичок в программировании и хочу создать его сам, чтобы изучать рельсы.)
При успешной отправке формы я хотел бы перенаправить на пользовательскую страницу "/ спасибо", на которой я благодарю пользователей за их интерес к продукту (а также рекомендую им пройти небольшой опрос).
В настоящее время успешные отправки отображаются в "/ invites/:id/", например "invites/3", который мне не нужен, так как он показывает количество приглашений, которые были отправлены. Вместо этого я хотел бы перенаправить все успешные отправки на страницу "/ спасибо".
Я пытался исследовать "rails custom URLs", но не смог найти ничего подходящего. Самым близким, что мне удалось найти, был этот пост Stackru о том, как перенаправить с помощью пользовательских маршрутов, но он не полностью понял рекомендуемое решение. Я также попытался прочитать Руководство по Rails по маршрутам, но я новичок в этом и не увидел ничего, что я понял, чтобы можно было создать собственный URL.
Я разместил свое сообщение с благодарностью, которое я хотел бы отобразить в успешной форме отправки в "views / invites / show.html.haml"
Мой маршрут
resources :invites
root :to => 'invites#new'
Я пробовал вставлять в rout.rb:
post "/:thanks" => "invites#show", :as => :thanks
Но я не знаю, будет ли это работать или как я скажу контроллеру перенаправить: спасибо
Мой контроллер (в основном ванильные рельсы, сюда включены только соответствующие действия):
def show
@invite = Invite.find(params[:id])
show_path = "/thanks"
respond_to do |format|
format.html # show.html.erb
format.json { render json: @invite }
end
end
# GET /invites/new
# GET /invites/new.json
def new
@invite = Invite.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @invite }
end
end
# POST /invites
# POST /invites.json
def create
@invite = Invite.new(params[:invite])
respond_to do |format|
if @invite.save
format.html { redirect_to @invite }
#format.js { render :action => 'create_success' }
format.json { render json: @invite, status: :created, location: @invite }
else
format.html { render action: "new" }
#format.js { render :action => 'create_fail' }
format.json { render json: @invite.errors, status: :unprocessable_entity }
end
end
end
Казалось бы, создание стандартного URL для отображения подтверждения будет относительно простым. Любые советы о том, как этого добиться, будут оценены.
3 ответа
Я предполагаю, что вы хотите перенаправить после вашего действия создания, которое выполняется при отправке формы.
Просто добавьте redirect_to следующим образом:
def create
@invite = Invite.new(params[:invite])
if @invite.save
...
redirect_to '/thanks'
else
...
redirect_to new_invite_path # if you want to return to the form submission page on error
end
end
Я опустил часть кода для краткости.
В ваших маршрутах добавьте:
get '/thanks', to: "invites#thanks"
Добавьте действие спасибо в ваш контроллер приглашений:
def thanks
# something here if needed
end
И создайте страницу thanks.html.erb в приложении /views/invites.
Я бы сделал get "/thanks" => "invites#thanks"
в routes.rb
и затем добавьте это в свой контроллер:
def thanks
end
Затем добавьте файл app/views/invites/thanks.html.erb
с вашим содержанием благодарности.
Вы можете создать маршрут следующим образом:
resources :invites do
collection do
get 'thanks'
end
end
Это также создаст вспомогательный путь под названием thanks_invites_path
,
Это будет на invites/thanks
путь, но если вы хотите, чтобы он был на/thanks
Вы могли бы просто сделать, как упоминал Джейсон:
get "/thanks" => "invites#thanks", :as => :thanks
as
part сгенерирует помощника для доступа к этой странице: thanks_path
,
Вам потребуется дополнительное действие в контроллере под названием thanks
и поместите всю необходимую информацию внутри, а также вам понадобится дополнительный вид под названием thanks.html.erb
Поскольку вы хотите, чтобы все переходили на эту страницу после успешной отправки, в вашем действии создания было бы:
format.html { redirect_to thanks_invites_path}
(или же thanks_path
), что бы вы ни выбрали, когда вы называете маршрут, вы можете проверить его с rake routes
если все в порядке, и все rake routes
говорит, просто добавь _path
в конце.