Как визуализировать формат JavaScript в контроллере Rails - PullRequest
1 голос
/ 04 апреля 2020

У меня есть маршрут с именем "/admin", который используется для добавления и перечисления продуктов:

resources :products, controller: "admin"

В администраторе контроллера у меня есть функция create:

  def create
    @product = Product.new product_values
    respond_to do |format|
      if @product.save
        format.html { redirect_to :root }
      else
        format.js { render 'admin/error' }
      end
    end
  end

Когда я пытался заставить его отрендериться до формата. js, он сказал:

ActionController::UnknownFormat
on `respond_to do |format|`

Я думал, что создал admin/create.js.haml:

console.log("got it")

, но это не так работа.

Почему я хотел, чтобы ответ был "format. js"? Поскольку я хочу добавить сообщение об ошибке в форму и не хочу обновить sh страницу, поэтому я отвечаю на JavaScript до append в некотором div с сообщением об ошибке.

Это admin/add_product.html.haml:

.p-5
  .container.column.justify-content-center
    %div.d-flex.justify-content-center.p-4#this-error
      %div
        %h3
          Add Product
    %div
      = form_for (@product || Product.new) do |f|
        .form-group.row
          = f.label :name,  class: 'col-md-2 col-form-label'
          %br/
          .col-sm-8
            = f.text_field :name, class: 'form-control'
        .form-group.row
          = f.label :stock,  class: 'col-md-2 col-form-label'
          %br/
          .col-sm-2
            = f.number_field :stock, class: 'form-control'
          .my-4
          = f.label :price,  class: 'ml-5 col-md-1 col-form-label'
          %br/
          .col-sm-2
            = f.number_field :price, class: 'form-control'
        .form-group.row
          = f.label :desc,  class: 'col-md-2 col-form-label'
          %br/
          .col-sm-8
            = f.text_area :desc, class: 'form-control'
        .d-flex.justify-content-center
          = f.submit "Add", class: 'btn btn-primary col-sm-8 p-2'

Как использовать для этого формат. js в Haml?

1 Ответ

0 голосов
/ 04 апреля 2020

Вы отправляете локальный запрос через форму, а не удаленно (AJAX запрос), поэтому ваш

format.js 

никогда не будет вызван.

что вы можете сделать так:

def create
    @product = Product.new product_values
    respond_to do |format|

        format.html { 
          if @product.save
             redirect_to :root
          else
             render 'admin/error'
           end
           }
        format.js {  }

    end
  end
...