Почему этот контроллер возвращает html, что приводит к сбою response_to? - PullRequest
1 голос
/ 11 июля 2020

Я следую курсу, в котором мы пытаемся отрендерить партиал с помощью response_to. Я строго следил за ним и очень смущен тем, почему мой проект теперь показывает ошибку, в то время как проект инструктора до этого момента работает нормально.

ActionController :: UnknownFormat в StocksController # search

ActionController::UnknownFormat in StocksController#search

For some reason, the controller can only respond to an html result, and not a js one, which is what this section of the course is covering. I'm having difficulty understanding why this is happening.

Here is the relevant model, controller, and views:

app/controllers/stocks_controller.rb

class StocksController 

app/models/stock.rb

class Stock < ApplicationRecord
    def self.new_lookup(ticker)
        client = IEX::Api::Client.new(
            publishable_token: Rails.application.credentials.iex_client[:sandbox_publishable_token],
            secret_token: Rails.application.credentials.iex_client[:sandbox_secret_token],
            endpoint: 'https://sandbox.iexapis.com/v1'
        )
        begin
            new(ticker: ticker, name: client.company(ticker).company_name, last_price: client.price(ticker))
        rescue Exception => e
            nil
        end
    end
end

app/views/users/my_portfolio.html.erb

My Portfolio
 

  Search Stocks
  <%= form_tag search_stock_path, remote: true, method: :get do %>
     <% = text_field_tag: stock, params [: stock], заполнитель: "Биржевой тикер", autofocus: true, class: "form-control form-control-lg"%>  <% = button_tag type:: submit, class: "btn btn-success" do%> <% = fa_icon 'search 2x'%> <% end%>   <% end%>   

app / views / users / _result. html .erb

<% if @stock %>
  <div class="card card-header results-block">
    <strong>Symbol: </strong> <%= @stock.ticker %>
    <strong>Name: </strong> <%= @stock.name %>
    <strong>Price: </strong> <%= @stock.last_price %>
  </div>
<% end %>

app / views / users / _result. js .erb

alert("Hello!");

Насколько я понимаю, введя действительный тикер в форму, я должен увидеть предупреждение, поскольку именно это происходит с инструктором. У меня уже есть remote: true в форме, что я видел из других ответов.

Любая помощь будет принята с благодарностью. Спасибо!

РЕДАКТИРОВАТЬ: Это мое приложение. js файл. В нем уже есть предложенные требования, и единственная часть, которую я добавил, была import "bootstrap".

// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")


// Uncomment to copy all static images under ../images to the output folder and reference
// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
// or the `imagePath` JavaScript helper below.
//
// const images = require.context('../images', true)
// const imagePath = (name) => images(name, true)

import "bootstrap"

Редактировать 2: Похоже, что часть remote: true этого не работает вообще. Когда я следую командам инструктора перед разделом, к которому относится этот вопрос, вызывается no ajax, и страница перезагружается снова.

Я имею в виду, что страница загружает конечную точку / search_stock из / my_portfolio конечная точка (откуда я начинаю поиск) вместо того, чтобы оставаться на / my_portfolio и ждать ответа js. Однако тег формы правильно отображает data-remote="true" в инспекторе. Ajax не называется

1 Ответ

0 голосов
/ 12 июля 2020
const { environment } = require('@rails/webpacker')

const webpack = require("webpack")

environment.plugins.append("Provide", new webpack.ProvidePlugin({
    $: "jQuery",
    jQuery: "jQuery",
    Popper: ["popper.js", "default"]
}))

module.exports = environment

Моя среда. js файл ссылался на jQuery внутри строк, вместо этого он должен был сказать jquery без заглавной буквы Q.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...