Понимание Rails отрисовки ошибки от контроллера - PullRequest
0 голосов
/ 08 апреля 2019

Я все еще новичок в Rails, и у меня возникают проблемы с пониманием того, как сделать определенные разделы страницы условно.У меня есть кнопка в index.html.erb, а также в другой части:

<%= @facade.processing_button %>
<%= render 'snap', app: @facade.app %>

, которая определяется следующим образом:

link_to processing_path(@app.id),
  method: :post, action: :processing,
  class: 'btn btn-danger' do
    concat([
      image_tag('blah', class: 'check_icon'),
      content_tag(:span, 'Processing')
    ].join(' ').html_safe)
  end

Эта кнопка вызывает метод контроллера:

def processing
  if service.upload
    # render success bar?
  else
    # render error bar?
  end
end

Я хотел бы сделать что-то вроде следующих картинок.В частичном снимке раздел выглядит следующим образом:

default

После нажатия кнопки, если действие выполнено успешно, я хочу отобразить следующеезеленая полоса успеха:

enter image description here

Мне неясно, как этого добиться.Должен ли я использовать какую-то форму JS / CoffeeScript?Должен ли я добавить столбцы к частичным как скрытые по умолчанию и просто показать их с JS, когда действие будет завершено?

Ответы [ 3 ]

2 голосов
/ 08 апреля 2019
  1. link_to processing_path(@app.id), method: :post, action: :processing Использование параметров _path и :action не имеет смысла. Используйте только один из них
  2. Вам необходимо решить, выполняет ли ваша кнопка "традиционный" запрос или запрос AJAX
  3. В случае традиционного запроса вы можете использовать переменную контроллера @success = ..., а затем проверить эту переменную в представлении: <% if @success %>
  4. В случае запроса AJAX все будет немного сложнее. Однако есть поддержка Rails для «успешных» и «неудачных» ответов AJAX. Взгляните на https://guides.rubyonrails.org/working_with_javascript_in_rails.html#rails-ujs-event-handlers. Как правило, вы будете отображать / скрывать определенные элементы на странице, в зависимости от ответа сервера
0 голосов
/ 08 апреля 2019

см. Документ: https://coderwall.com/p/jzofog/ruby-on-rails-flash-messages-with-bootstrap

Шаг 1: Добавьте флэш-код в файл layouts / application.html.erb

<% flash.each do |key, value| %>
    <div class="<%= flash_class(key) %>">
        <%= value %>
  </div>
<% end %>

Шаг 2: Просто нужно быстро расширить application_helper.rbсо следующим

def flash_class(level)
    case level
        when :notice then "alert alert-info"  
        when :success then "alert alert-success"
        when :error then "alert alert-error"
        when :alert then "alert alert-error"
     end
end

# sometimes it will not work then wrap it with single quotes. for example:  
  when 'notice' then "alert alert-success"

Шаг 3: Добавьте ниже в controller.erb

 def processing
   if service.upload
      flash[:success] = "Processing complete!"
   else
      flash[:error] = "Something went wrong!"
   end
 end

Надеюсь, это будет работать:)

0 голосов
/ 08 апреля 2019

Вам понадобится что-то подобное в ваших макетах

  <% flash.each do |name, msg| %>
    <%= content_tag :div, msg, class: "alert alert-info" %>
  <% end %>

Затем на вашем контроллере

def processing
  if service.upload
    flash[:notice] = "Success"
  else
    flash[:notice] = "Error"
  end
end

Посмотрите на это: rails 4 - уведомление о вспышке

...