#ruby-on-rails #split #ab-testing
#ruby-on-rails #разделение #ab-тестирование
Вопрос:
У меня есть несколько разных представлений, которые должны использовать один и тот же эксперимент (т.Е. Нижний колонтитул и часть заголовка должны показывать опцию ‘nav_a’ или ‘nav_b’).
Я надеялся, что простое использование одного и того же именованного эксперимента заставит это работать, но, похоже, это не так (т. Е. Иногда в заголовке есть «a», а в нижнем колонтитуле — «b», наоборот, или один и тот же a для обоих).
Как я мог бы наилучшим образом добиться этого?
В качестве дополнительного вопроса, часть моего «эксперимента» заключается в том, чтобы узнать, какой вид был более успешным при переходе пользователей по ссылке на видео; в моем приложении я сохраняю такие клики как модель «посещения»; может ли visit_controller знать, какой тест — a или b — выполнялсячтобы я мог сохранить его в своей модели посещения? Таким образом, я мог бы получить подсчет того, какая модель посещения имела «эксперимент 1 вариант a» против «эксперимент 2 вариант b» и т.д.
Я был бы доволен чем-то таким простым, как глобальная переменная, чтобы знать, что сохранять; не уверен, как таким образом инициировать ab_test в split.
Обновить:
Это пример кода текущих страниц:
/layout/header.html.erb со строкой типа:
<%= ab_test('test_test', 'This is Header Test A', 'This is Header Test B') %>
И /layout/footer.html erb имеет
<%= ab_test('test_test', 'This is Footer Test A', 'This is Footer Test B') %>
но они не всегда используют один и тот же параметр. Также не уверен, как наилучшим образом реализовать ‘helper_method’, как описано в документации здесь: https://github.com/andrew/split#views
ОБНОВЛЕНИЕ # 2
Я просто попытался изменить код в layouts/header.html.erb и layouts/footer.html.erb на это:
<%= render partial: ab_test("test_test", "layouts/test_a", "layouts/test_b") %>
Когда я оставил оба этих других макета, используя ОДИН и ТОТ ЖЕ частичный (т.Е. _test_a.html.erb), они оба были синхронизированы и отображали то, что ожидалось.
Однако, когда я изменил layouts/ footer.html.erb для отображения этого частичного:
<%= render partial: ab_test("test_test", "layouts/test_footer_a", "layouts/test_footer_b") %>
Они БОЛЬШЕ НЕ БЫЛИ СИНХРОНИЗИРОВАНЫ и случайным образом отображали другую часть — т. Е. Сначала A нижний колонтитул B, затем заголовок b и нижний колонтитул b, заголовок a нижний колонтитул b и т. Д. — Все в одном сеансе.
Комментарии:
1. разделение должно сохранять каждый эксперимент одинаковым на протяжении всего сеанса. Не уверен, почему вы видите то, что видите. Поместите код, который вы используете для выбора верхнего и нижнего колонтитулов, в вопрос.
2. Добавлено больше кода; предпринял попытку, как я думал, вспомогательного метода, как описано в документах, но не продвинулся дальше, чтобы выяснить это.
Ответ №1:
Я думаю, я понял, как лучше всего справиться с этим сам.
В ApplicationController создайте вспомогательный метод ie (сделал это простым для его тестирования):
helper_method :home_display_test
def home_display_test
@home_display = ab_test("home_display_test", 'original', 'new')
return @home_display
end
Тогда в моих представлениях я мог загружать разные части, такие как:
или
Я думаю, что это работает довольно надежно; Я мог бы даже запросить, какая тестовая версия находится в другом контроллере, чтобы сохранить данные в щелчке…
Комментарии:
1. Я беру свои слова обратно; Кажется, я каждый раз получаю «оригинал».
Ответ №2:
Один тест AB должен иметь один набор альтернатив, которые определены в файле конфигурации или при первом вызове ab_test()
попробуйте сделать так:
<head>
<%- if ab_test('layout_test', 'original', 'new') == 'origional' %>
<title>Old Title</title>
<%- else %>
<title>New Title</title>
<%- end %>
</head>
<body>
<%- if ab_test('layout_test', 'original', 'new') == 'origional' %>
<%= render partial: 'layout/original'%>
<%- else %>
<%= render partial: 'layout/new'%>
<%- end %>
</body>
должно работать как шарм!