Rails Javascript Link_tos

В моем приложении рельсы у меня есть эти два link_to которые оба явно что-то делают. Когда я

<% if Excont.where(:user_id=> current_user,:movie_id => @movie.id,:actionall => '2').includes(:user).all.count == 0%>

<tr style="border-top: none; ">
    <td>
        <%= link_to('Mark as action', {:controller => :excont, :action => 'thisisanaction', :id=> @movie.id, :actionall=>'2'}, :method => :post, :remote => true,  :disable_with => 'Updating...') %>
    </td>
</tr>

<% else %>

<tr style="border-top: none;">
    <td>
        <%= link_to('Unmark as action', {:controller => :excont, :action => 'removethisisanaction', :id=> @movie.id, :actionall=>'2'}, :method => :post, :remote => true,  :disable_with => 'Updating...') %>
    </td>
</tr>

<% end %>

Когда я нажимаю на первый link_to (thisisanaction), он управляет Updating... а затем возвращается к Mark as action, если я перезагрузить это изменится на Unmark as action,

Я спрашиваю, как идти от

Mark as action -> Updating... -> Unmark as action

а потом

Unmark as action -> Updating... -> Mark as action

без перезагрузки страницы. Как будет выглядеть мой код JS

1 ответ

Решение

Вот как я это исправил

Я поместил это в отдельный файл с именем _action.html.erb

<% if Excont.where(:user_id=> current_user,:movie_id => @movie.id,:actionall => '2').includes(:user).all.count == 0%>

<tr style="border-top: none; ">
    <td>
        <%= link_to('Mark as action', {:controller => :excont, :action => 'thisisanaction', :id=> @movie.id, :actionall=>'2'}, :method => :post, :remote => true,  :disable_with => 'Updating...') %>
    </td>
</tr>

<% else %>

<tr style="border-top: none;">
    <td>
        <%= link_to('Unmark as action', {:controller => :excont, :action => 'removethisisanaction', :id=> @movie.id, :actionall=>'2'}, :method => :post, :remote => true,  :disable_with => 'Updating...') %>
    </td>
</tr>

<% end %>

Затем я создал два .js.erb файлы, названные в честь обоих действий (что очень важно, я нашел), так thisisanaction.js.erb а также removethisisanaction.js.erb,

Эти два файла должны быть помещены в папку соответствующего контроллера, в этом случае excontЕсли не это не будет работать.

Обе эти папки должны содержать этот код

$(".excontaction").html("<%= escape_javascript(render('layouts/action'))%>");

В представлении, где вы хотите, чтобы кнопка показывала, вы добавляете это

<div class="excontaction">
<%= render 'layouts/action' %>
</div>

Див class или же id должен соответствовать тому, который вы положили в .js.erb папки

Это должно работать!

Другие вопросы по тегам