У меня есть угловой ng-repeat
в Ruby.erb view. Теперь мне нужно сделать link_to на странице, посвященной некоторому IP-адресу. Сначала я попробовал
<td><%= link_to '{{ roll.system }}' ,'server/'+'{{ roll.system }}' %></a></td>
,
где {{roll.system}}
- угловая переменная, содержащая ip. Общий путь будет похож на localhost/server/127.0.0.1
и не будет работать из-за точек в IP-адресе. Теперь я пытаюсь сделать хэш из IP-адреса, а затем декодировать его после завершения маршрутизации.
Мой текущий код:
<td><%= link_to '{{ roll.system }}' ,"server/"+Base64.urlsafe_encode64('{{ roll.system }} %></a></td>
Вот проблема. Base64 кодирует строку как есть, создавая хэш литеральной строки '{{ roll.system }}'
. Мне нужно, чтобы он искал значение, которое он имеет в угловой переменной.
Я не понимаю, почему это проблема, потому что link_to отлично работает.
Пожалуйста, не проконсультируйтесь с дизайном a-la 'rewrite your app from scratch'.
Я думаю, что вы слегка путаете две отдельные концепции - рендеринг вида Rails и воспроизведение углового.
Когда вы нажмете свое приложение, ваше первое предложение отобразит представление Rails и превратит ваш link_to
в этот необработанный HTML:
<td><a href="{{ roll.system }}/server/{{ roll.system }}"></a></td>
После того, как рельсы отобразили представление и вернули страницу в браузер, ваш Угловой код затем {{ roll.system }}
, найдите {{ roll.system }}
вызовы и измените это на что-то вроде:
<td><a href="127.0.0.1/server/127.0.0.1"></a></td>
Проблема со второй попыткой заключается в том, что он будет запускать Base64.urlsafe_encode64
при рендеринге Rails, поэтому Angular не заменит roll.system
на этом этапе. Таким образом, вы получите этот необработанный HTML независимо от того, что такое roll.system
:
<td><a href="{{ roll.system }}/server/e3sgcm9sbC5zeXN0ZW0gfX0="></a></td>
Вместо этого вы можете попробовать base64 кодировать строку в Angular. Таким образом, вы можете посмотреть на использование чего-то вроде angular-base64. Что вы можете использовать, чтобы сделать следующее:
<td><a href="{{ roll.system }}/server/{{ roll.encoded_system }}"></a></td>
Где вы устанавливаете roll.encoded_system
в своем угловом контроллере. Как упоминает Мартин ниже, существует собственный метод window.btoa(), который можно использовать для этого. Я не совсем уверен, что вы можете использовать его непосредственно в шаблоне, но его все равно нужно вызвать в контроллере.