У меня есть две модели: пользователь и продукт. Один пользователь имеет много принадлежащих_products, а продукт принадлежит владельцу. Продукты имеют available:boolean
.Создание нескольких кнопок Ajax с каждой петлей
Я хочу составить список принадлежащих_products, которые могут быть переведены из доступных, недоступных с помощью кнопки. Вот что я сделал, используя M. Hartl example:
приложение/мнения/общие/_owned_products_list.html.erb
<ol class="products">
<% @owned_products.each do |product| %>
<%= link_to(product.name, product) %>
<%= render 'products/available_form', product: product %>
<% end %>
</ol>
приложение/просмотров/Продукты/_available_form.html.erb
<div id="available_button_<%=product.id%>">
<% if product.available? %>
<%= form_for(product, remote: true) do |f| %>
<div><%= f.hidden_field :available, value: nil %></div>
<%= f.submit t('product.available.undo'), class: "btn btn-small" %>
<% end %>
<% else %>
<%= form_for(product, remote: true) do |f| %>
<div><%= f.hidden_field :available, value: true %></div>
<%= f.submit t('product.available.do'), class: "btn btn-primary btn-small" %>
<% end %>
<% end %>
</div>
приложение/контроллеры/products_controller.rb
.
.
.
def update
@product = Product.find(params[:id])
if @product.update_attributes(product_params)
respond_to do |format|
format.html do
flash[:success] = t('flash.success.product.update')
redirect_to @product
end
format.js
end
else
render 'edit'
end
end
.
.
.
приложение/просмотров/Продукты/update.js.erb
$("#available_form_<%[email protected]%>").html("<%= escape_javascript(render('available_button', product: @product)) %>")
Но это не работает: Имеющаяся кнопка не обновляется на всех:
Когда я нажимаю на доступной (или недоступной) кнопке ничего не меняется. Если я обновляю всю страницу, она переключается, независимо от количества кликов ...
Знаете ли вы, где я не смог?
EDIT
ОК, я получил его, это была глупая ошибка: мой available_form было Ид available_button_<%[email protected]%>
и не available_form_<%[email protected]%>
...
Так вот правильный:
app/views/products/update.js.erb
$("#available_button_<%[email protected]%>").html("<%= escape_javascript(render('available_button', product: @product)) %>")
Спасибо! Это будет полезно. Но знаете ли вы, почему это не сработало? –
Хорошо, прежде всего, я не вижу в вашем коде никакого тега с #available_form _ <% = @ product.id%>, only available_button _ <% = product.id%> –
ОК, я нашел его и отредактировал свой вопрос. Большое спасибо ! –