У меня есть таблица, в которой я загружаю значения из сеанса.
Я работаю над кнопкой обновления. Я хочу передать текущее значение текстового поля контроллеру для выполнения операции обновления.
Мой код выглядит так:
<table>
<thead>
<tr>
<th width="200">Name</th>
<th width="150">Price</th>
<th>Quantity</th>
<th width="150">Total</th>
<th></th>
</tr>
<% grand_total = 0 %>
<% session[:cart].each do |key, item| %>
<tr>
<td><%= item[:name] %></td>
<td>Rs. <%= item[:price] %></td>
<td><%= text_field_tag(:quantity, item[:quantity]) %>
<%= link_to("Update", {:action => "update", :id => item[:id], :quantity => item[:quantity]}) %>
</td>
<td><%= item[:total_cost] %></td>
<td>
<%= link_to("X", {:action => "delete", :id => item[:id]}) %>
</td>
</tr>
<% grand_total = grand_total + item[:total_cost] %>
<% end %>
</thead>
</table>
Когда я нажимаю кнопку обновления, путь показывает "localhost: 3000/cart? Quantity = 1", хотя я изменяю значение в текстовом поле.
Шаблоны ERB визуализируются Rails на стороне сервера, но это взаимодействие происходит на стороне клиента, в браузере.
<%=... %>
- причудливая форма интерполяции строк, но вы все равно можете думать об этом так же:
quantity = 1
message = "You have #{quantity} items"
quantity = 2
puts message # -> You have 1 items
Вы бы не ожидали, что напечатать. You have 2 items
, не так ли?
onchange
простой вариант - поместить некоторый javascript в директиву onchange
на текстовом входе, который обновит кнопку отправки, но вы также можете посмотреть "привязку данных", если вы столкнулись с этой проблемой много.