Изменить локальную переменную Ruby с помощью Ajax в Ruby on Rails - PullRequest
0 голосов
/ 05 июля 2018

Я создаю страницу планирования, которая показывает еженедельное расписание и хочу сделать стрелки внизу страницы, которые переключаются вперед и назад на неделю. Для этого я создаю в контроллере переменную @wbeg, которая по умолчанию имеет начало недели и два действия, week_after и week_before, с соответствующими файлами js.erb. Я не могу понять, как изменить переменную @wbeg с помощью ajax, и мне нужно сделать так, чтобы все оставалось на одной странице.

Вот контроллер:

class HomeController < ApplicationController

    def home
    end

    def scheduling
        @work_days = WorkDay.all
        @jobs = Job.all
        @wbeg = Date.today - Date.today.wday + 1 #beginning of this week
    end

    def week_before
        respond_to do |format|
            format.html { redirect_to scheduling_path notice: "You should not see this message, contact admin if you do."}
            format.js
        end
    end

    def week_after
        respond_to do |format|
            format.html { redirect_to scheduling_path notice: "You should not see this message, contact admin if you do."}
            format.js
        end
    end

end

Страница планирования:

<p id="notice"><%= notice %></p>

<h1>Work Day Scheduling</h1>

<table>
    <thead>
        <tr>
            <th>Job #</th>
            <th>Job</th>
            <th>Monday</th>
            <th>Tuesday</th>
            <th>Wednesday</th>
            <th>Thursday</th>
            <th>Friday</th>
            <th>Saturday</th>
        </tr>
    </thead>
    <tbody id = "main_table">
        <%= render "home/main_table" %>
    </tbody>
</table>
<%= link_to '<--', week_before_path, remote: true %>
<%= link_to '-->', week_after_path, remote: true %>

и две страницы js.erb:

$('#main_table').html("<%= j render 'main_table', locals: { wbeg: @wbeg - 7 } %>");

Другой:

$('#main_table').html("<%= j render 'main_table', locals: { wbeg: @wbeg + 7 } %>");

Я также уже пытался изменить переменную в week_before и после действий в контроллере, но он выдает ту же ошибку: «nil не может иметь операции» - «» или что-то еще, что просто означает, что она не распознает переменную.

1 Ответ

0 голосов
/ 05 июля 2018

Как вы сейчас это закодировали, значение переменной @wbeg во время создания файла javascript будет жестко запрограммировано в файле javascript. Это значение никогда не изменится. Что бы это ни было, когда был сгенерирован javascript.

Вам нужна переменная javascript, которую вы можете обновить в коде javascript, который выполняет вызов AJAX.

...