Как передать несколько параметров в Rails?

Есть у меня check_box_tag со JS скриптом который передает параметр task_status:
<%= check_box_tag :status, 'complete', task.status, task_id: task.id  %>
            <% session[:task_id] = task.id %>
            <script>
              $('#status').change(function() {
                $.get('todo/task_status?task_status='+$(this).val(), function(data, status) {
                  if(status == 'success'){
                    alert(data)
                  }
                })
              });
            </script>

не ужасайтесь, что task_id передается через session, это так для вида.
Вот контроллер:
def task_status

    @task = Task.find(session[:task_id])

    if @task.status == COMPLETE_STATUS
      @task.status = nil
    else
      render text: 'success' if @task.status = params[:task_status]
    end

    @task.save!
  end


Так вот мне нужно передать как то и task_id: task.id

UPD1

Все заработало но только для первого таска в списке, то есть когда я нажимаю на какой то другой то ничего не происходит, лог молчит полностью, есть подозрение что javascript просто не выполняется
  • Вопрос задан
  • 2838 просмотров
Пригласить эксперта
Ответы на вопрос 2
viktorvsk
@viktorvsk
Не ужасаться сложно
Про сессии забудьте
Гет-запросами состояние сервера не меняется, для этого придумали пост и остальные

У вас, по-хорошему, должен быть роут типа:
patch '/task/:id/state', to: 'tasks#state'

а в JS что-то вроде:
$('#checkbox').change(function(){
$.ajax({
url: '/task/1/state',
data: { status: $(this).val() },
method: "PATCH"
})
})


Копировать не стоит, за работоспособность не ручаюсь, но идея такова

Взялись за рельсы, разберитесь в REST. Будет очень много негативных эмоций, если пойдете против системы, по-своему. В рельсах главное - это конвенция.
Ответ написан
rinat_crone
@rinat_crone
Chef Technical Officer
Вы биндитесь по айдишнику $('#status') Соответственно, обработчик вешается только на первый чекбокс на странице (вы ведь знаете, что ID элемента должен быть уникальным в DOM?). Выбирайте чекбоксы как-нибудь иначе. Я бы сделал какой-нибудь data-аттрибут у чекбокса и биндился бы на него
$('body').on('change', '[data-some-key]', function() {...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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