Передача переменной AngularJS Data-Bind в качестве переменной Ruby on Rails

0

Я разрабатываю приложение 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>
  • 0
    Вы не можете передать интерфейсный код / переменные во внутреннюю функцию. Что вы можете сделать, так это выставить маршруты к Javascript. Там есть несколько полезных камней , которые сделают это за вас.
Теги:
ng-repeat

2 ответа

0

Rails не может видеть ваши угловые переменные, но помимо использования хорошего драгоценного камня для достижения того, что вы хотите, вы также можете передать теги Angular {{}} в качестве параметра для самого URL Rails. Rails не заботится о существовании идентификатора, к которому вы обращаетесь, только о том, что вы передаете параметр, на который он ссылается.

Единственное предостережение в том, что вы должны его игнорировать:

<%= link_to 'Edit', CGI::unescape(edit_song_path('{{e.id}}')) %>
0

Код на стороне сервера (помощник рельсов) будет отображаться задолго до того, как появится 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 - интересный подход.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню