ActionController::UnknownFormat 在 StocksController#search
ActionController::UnknownFormat in StocksController#search
我第一次尝试在教程中使用 Ajax。目标是输入股票标识符,按下按钮,它会在同一页面上显示有关该股票的信息,而无需重新加载。我没有收到任何错误消息,当我进入控制台时,它会在网络响应下显示带有正确股票信息的部分 HTML 代码,只是不会将其推送到屏幕上。当我单击网络响应时,出现未知格式错误。
相关代码:
class StocksController < ApplicationController
def search
if params[:stock].present?
@stock = Stock.new_from_lookup(params[:stock])
if @stock
respond_to do |format|
format.js {render partial: 'users/result'}
end
else
puts "incorrect symbol"
flash[:danger] = "You have entered an incorrect symbol."
redirect_to my_portfolio_path
end
else
puts "nothing"
flash[:danger] = "You need to type something, what did you expect to happen?"
redirect_to my_portfolio_path
end
end
end
部分结果:
<%if @stock%>
<div class = "well results-block">
<strong>Symbol:</strong><%= @stock.ticker%>
<strong>Name:</strong><%= @stock.name%>
<strong>Last Price:</strong><%= @stock.last_price%>
</div>
<%end%>
结果 JS erb
$('#result').html("<%=j (render 'users/result.html')%>")
网页本身
<h1>My portfolio</h1>
<h3>Search for stocks</h3>
<div id = "stock-lookup">
<%=form_tag search_stocks_path,remote: true,method: :get, id: "stock-lookup-form" do%>
<row>
<div class = "form-group row no-padding text-center col-md-12">
<div class = "col-md-10">
<%=text_field_tag :stock, params[:stock], placeholder: "Stock ticker symbol", autofocus: true, class: "form-control search-box input-lg" %>
</div>
<div class = "col-md-2">
<%=button_tag(type: :submit, class:"btn btn-lg btn-success") do%>
<i class = "fa fa-search"></i> Look Up A Stock
<%end%>
</div>
</div>
</row>
<%end%>
</div>
<div id= "results">
<%=render 'result'%>
</div>
如果发现 @stock
,则您使用的 JS 格式正确。但是当你不重定向到 my_portfolio_path
时,我假设此操作正在返回格式 HTML。为什么重定向到 my_portfolio_path?我认为对于您的 AJAX 路线,这不是必需的。
我认为这个例子更适合您的 SearchController
:
class StocksController < ApplicationController
def search
@stock = Stock.new_from_lookup(params[:stock])
flash[:danger] = "No stock found." if @stock.nil?
respond_to do |format|
format.js {render partial: 'users/result'}
end
end
end
这是您的 JS 模板:
<% if @stock %>
$('#results').html("<%=j (render 'users/result.html')%>");
<% else %>
console.log("No stock found! It's up to you what to do in frontend.")
// showing some flash!
// however_you_render_flash_in_you_app();
<% end %>
你不应该像
这样的 #results
而不是 #result
$('#results').html("<%=j (render 'users/result.html')%>")
我第一次尝试在教程中使用 Ajax。目标是输入股票标识符,按下按钮,它会在同一页面上显示有关该股票的信息,而无需重新加载。我没有收到任何错误消息,当我进入控制台时,它会在网络响应下显示带有正确股票信息的部分 HTML 代码,只是不会将其推送到屏幕上。当我单击网络响应时,出现未知格式错误。
相关代码:
class StocksController < ApplicationController
def search
if params[:stock].present?
@stock = Stock.new_from_lookup(params[:stock])
if @stock
respond_to do |format|
format.js {render partial: 'users/result'}
end
else
puts "incorrect symbol"
flash[:danger] = "You have entered an incorrect symbol."
redirect_to my_portfolio_path
end
else
puts "nothing"
flash[:danger] = "You need to type something, what did you expect to happen?"
redirect_to my_portfolio_path
end
end
end
部分结果:
<%if @stock%>
<div class = "well results-block">
<strong>Symbol:</strong><%= @stock.ticker%>
<strong>Name:</strong><%= @stock.name%>
<strong>Last Price:</strong><%= @stock.last_price%>
</div>
<%end%>
结果 JS erb
$('#result').html("<%=j (render 'users/result.html')%>")
网页本身
<h1>My portfolio</h1>
<h3>Search for stocks</h3>
<div id = "stock-lookup">
<%=form_tag search_stocks_path,remote: true,method: :get, id: "stock-lookup-form" do%>
<row>
<div class = "form-group row no-padding text-center col-md-12">
<div class = "col-md-10">
<%=text_field_tag :stock, params[:stock], placeholder: "Stock ticker symbol", autofocus: true, class: "form-control search-box input-lg" %>
</div>
<div class = "col-md-2">
<%=button_tag(type: :submit, class:"btn btn-lg btn-success") do%>
<i class = "fa fa-search"></i> Look Up A Stock
<%end%>
</div>
</div>
</row>
<%end%>
</div>
<div id= "results">
<%=render 'result'%>
</div>
如果发现 @stock
,则您使用的 JS 格式正确。但是当你不重定向到 my_portfolio_path
时,我假设此操作正在返回格式 HTML。为什么重定向到 my_portfolio_path?我认为对于您的 AJAX 路线,这不是必需的。
我认为这个例子更适合您的 SearchController
:
class StocksController < ApplicationController
def search
@stock = Stock.new_from_lookup(params[:stock])
flash[:danger] = "No stock found." if @stock.nil?
respond_to do |format|
format.js {render partial: 'users/result'}
end
end
end
这是您的 JS 模板:
<% if @stock %>
$('#results').html("<%=j (render 'users/result.html')%>");
<% else %>
console.log("No stock found! It's up to you what to do in frontend.")
// showing some flash!
// however_you_render_flash_in_you_app();
<% end %>
你不应该像
这样的#results
而不是 #result
$('#results').html("<%=j (render 'users/result.html')%>")