Представление js.erb запускает весь код js независимо от операторов ruby if

0

Я использую js-формат от контроллера rails и js.erb, чтобы выполнить некоторые изменения html при отправке формы. В этом файле js.erb есть несколько операторов ruby if. Все частичные файлы извлекаются (в соответствии с вкладкой "Сеть Chrome") независимо от операторов if, являющихся истинными или ложными. Только правильные действия выполняются в html, но эти дополнительные действия js заставляют время составлять почти 1 секунду против 54 мс, если я удалю оператор if из действия. Мне интересно, есть ли способ, чтобы код js запускался только при соблюдении надлежащих условий. Благодарю.

Файл js.erb

$("#edit_time_modal_<%= @order.id %>").modal("hide");
<% new_time = @order.order_start_date_time %>
<% if @order_date != @order.order_start_date_time %>
  <% end_of_day = Time.zone.now.end_of_day %>
  <% if @order_date < end_of_day && new_time < end_of_day %>
    $("#order_details_<%= @order.id %>").replaceWith('<%= j(render 'order_details', todays_order: @order) %>');
    $("#dashboard_orders_table").replaceWith('<%= j(render 'orders_table') %>');
    $("#dashboard_totals").replaceWith('<%= j(render 'dashboard_totals') %>');
    $(".select_order").replaceWith('<%= j(render 'new_delivery_select_order') %>');
  <% elsif @order_date < end_of_day && new_time > end_of_day %>
    $("#dashboard_order_row_<%= @order.id %>").remove();
    $("#dashboard_totals").replaceWith('<%= j(render 'dashboard_totals') %>');
    $("#tom_orders").replaceWith('<%= j(render 'tom_orders') %>');
    $("#tom_totals").replaceWith('<%= j(render 'tom_totals') %>');
    $(".select_order").replaceWith('<%= j(render 'new_delivery_select_order') %>');
    $("#tom_orders_date").replaceWith('<%= j(render 'tom_orders_date') %>');
  <% elsif @order_date > end_of_day && new_time < end_of_day %>
    $("#tom_order_<%= @order.id %>").remove();
    $("#tom_totals").replaceWith('<%= j(render 'tom_totals') %>');
    $("#dashboard_orders_table").replaceWith('<%= j(render 'orders_table') %>');
    $("#dashboard_totals").replaceWith('<%= j(render 'dashboard_totals') %>');
    $(".select_order").replaceWith('<%= j(render 'new_delivery_select_order') %>');
    $("#tom_orders_date").replaceWith('<%= j(render 'tom_orders_date') %>');
  <% elsif @order_date > end_of_day && new_time > end_of_day %>
    $("#tom_orders").replaceWith('<%= j(render 'tom_orders') %>');
    $("#tom_totals").replaceWith('<%= j(render 'tom_totals') %>');
    $("#tom_orders_date").replaceWith('<%= j(render 'tom_orders_date') %>');
  <% end %>
<% end %>

$("#edit_time_modal_<%= @order.id %>").replaceWith('<%= j(render 'edit_time', order: @order) %>');

Действие контроллера

def update_order_time
    @order = Order.find(params[:order_id])
    if params[:extras].present?
      @order.update_attributes(...)
    else
      @order.update_attributes(...)
    end
    @order_date = params[:order_date]
    if Order.tomorrows_orders.present?
      @tomorrows_orders = Order.tomorrows_orders.order(:order_start_date_time)
    elsif Order.day_after_tom_orders.present?
      @tomorrows_orders = Order.day_after_tom_orders.order(:order_start_date_time)
    elsif Order.three_days_orders.present?
      @tomorrows_orders = Order.three_days_orders.order(:order_start_date_time)
    elsif Order.four_days_orders.present?
      @tomorrows_orders = Order.four_days_orders.order(:order_start_date_time)
    else
      @tomorrows_orders = []
    end
    respond_to do |format|
      format.js
    end
  end

1 ответ

0
Лучший ответ
if(<%= @order_date == @order.order_start_date_time %>) {
  // do something ...
} else {
  // do something different ...
}

Вышеприведенный код будет запускать весь код на стороне клиента независимо от результата оператора (т.е. Делать что-то и делать что-то другое)

<% if @order_date != @order.order_start_date_time %>
  // do this only
<% else %>
  // do that only
<% end %>

Это запустит только один набор кода на основе оператора if (т.е. Только "сделать это только" или "сделать это только")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню