Я разрабатываю приложение Ruby on Rails, используя AngularJS для интерфейса. Я использую ресурс AngularJS для запроса данных из моей базы данных MySql и хранения их в переменной "entries". Ruby on Rails уже установил контроллеры для строк "Showing", "Editing" и "Destroying" из базы данных, поэтому я не уверен, хочу ли я изобретать колесо, игнорируя эти контроллеры и вместо этого использую Resource AngularJS. При использовании ng-repeat для фильтрации моих данных я также хотел бы добавить ссылки RoR 'Showing', 'Editing' и 'Destroying' в каждой уважаемой строке. Я не могу использовать RoRs <% @songs.each do | song | %>, потому что это добавит цикл внутри моего цикла ng-repeat. Вместо этого я просто хочу использовать переменную AngularJS {{e.id}} и передать ее в функцию <% = link_to 'Edit', edit_song_path (ID_VARIABLE)%>, но переменные RoR и AngularJS, похоже, не играют вместе, Есть ли "простой" способ сделать это?
<div class="container">
<ul class="list-group">
<table class="table">
<thead>
<tr>
<th>Band</th>
<th>Title</th>
</tr>
</thead>
<tbody ng-repeat="e in entries | filter:searchFilter">
<tr>
<td>{{e.band}}</td>
<td>{{e.title}}</td>
<td>{{e.id}}</td>
<td>
<!-- Pass 'e.id' to the 'link_to' function -->
<%= link_to 'Edit', edit_song_path(**{{e.id}}**) %>
</td>
</tr>
</tbody>
</table>
</ul>
</div>
</div>
Rails не может видеть ваши угловые переменные, но помимо использования хорошего драгоценного камня для достижения того, что вы хотите, вы также можете передать теги Angular {{}}
в качестве параметра для самого URL Rails. Rails не заботится о существовании идентификатора, к которому вы обращаетесь, только о том, что вы передаете параметр, на который он ссылается.
Единственное предостережение в том, что вы должны его игнорировать:
<%= link_to 'Edit', CGI::unescape(edit_song_path('{{e.id}}')) %>
Код на стороне сервера (помощник рельсов) будет отображаться задолго до того, как появится javascript, поэтому ваша переменная js не будет доступна для передачи в помощник rails.
Самый быстрый (не идеальный) способ справиться с этим <a href="/thing/{{e.id}}/edit">Edit</a>
бы в том, чтобы не использовать помощник пути рельсов и явно выписать путь в <a href="/thing/{{e.id}}/edit">Edit</a>
элементе <a href="/thing/{{e.id}}/edit">Edit</a>
.
Несколько лет назад я написал блог об использовании Angular with Rails без полного погружения в клиентский MVC, если вам когда-либо интересны: http://www.littlelines.com/blog/2014/02/21/how_to_use_angularjs_and_keep_loving_rails/
Использование чего-то вроде ресурса Angular Rails может позволить вам ссылаться на конечную точку редактирования ваших песен без явного жесткого кодирования ее везде в вашем приложении.
Надеюсь, что это помогает.
PS Ссылки на js_routes gem от sjagr - интересный подход.