Задать вопрос
pakrauce
@pakrauce

Как на RoR обновить поле в БД по нажатию на ссылку?

Только начал тыкать изучать Ruby и RoR. В представлении index, где выводятся все данные из таблицы БД, хочу добавить ссылку на обновление одного из полей.

<tbody>
    <% @my_table.each do |my_table| %>
      <tr>
        <!-- -->
        <td><%= link_to 'Тут ссылка, которая должна обновить одно из полей в БД у текущей записи', ............, method: :patch, data: {confirm: 'Вы уверены?'} %>
      </tr>
    <% end %>
  </tbody>


Какую функцию использовать на месте многоточия? Что в контроллере? Все, что нужно сделать - увеличить цифру в поле my_table.my_field на единицу
  • Вопрос задан
  • 201 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Fahrenhe17
@Fahrenhe17
Ruby on Rails developer
Ну смотрите. Скорее всего у Вас есть экшн update для my_table. В нем написано что-то типа
@my_table.update_params(allowed_params)

напишем полностью для наглядности:
@my_table.update_params(params.require(:my_table).permit(:my_field, :my_field2)


То-есть, когда поступает patch запрос в этот экшн, то ему разрешены такие атрибуты как my_field и my_field2.
Теперь задача проще. Отправить patch запрос с такими нужными атрибутами.
В нашем случае, запрос нужно отправить при помощи link_to. Чтож, идем в офф документацию, ищем link_to.
Читаем все внимательно и находим строчку:
link_to can also produce links with anchors or query strings:

и ниже видим код примера:
link_to "Nonsense search", searches_path(foo: "bar", baz: "quux")
# => <a href="/searches?foo=bar&amp;baz=quux">Nonsense search</a>


остается за малым! пишем
= link_to 'increment', my_table_path(my_table, my_table: {my_field: my_table.my_field + 1}), method: :patch, data: {confirm: 'Вы уверены?'}


Но в таком способе решения есть небольшие подводные камни, поэтому к нему лучше прикрутить ajax. Это тоже просто, нужно всего-лишь немного траффика и великолепное приложение - google.com
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы