Я следую курсу, в котором мы пытаемся отрендерить партиал с помощью response_to. Я строго следил за ним и очень смущен тем, почему мой проект теперь показывает ошибку, в то время как проект инструктора до этого момента работает нормально.
ActionController :: UnknownFormat в 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 не называется