我无法从控制器 Rails 7 渲染部分 js

问题描述 投票:0回答:1

我已经创建了 my_portfolio.html.erb ,并将表单提交给带有远程控制器的控制器: true ,控制器接受参数并验证一切都可以正常使用条件和代码,但不能渲染部分 js 错误说 StocksController#search 中的 ActionController::UnknownFormat ActionController::未知格式 提取的源代码(第 7 行附近):

 @stock = Stock.new_lookup(params[:stock])
  if @stock
    respond_to do |format|
  format.js { render partial: 'users/result', status: :unprocessable_entity }
   end
<h1>My portfolio</h1>
<div class="search-area">
  <p>search stock</p>
  <%= form_tag search_stock_path, remote: true, method: :get do %>
  <!-- form fields go here -->
  <div class="form-group row">
    <div class="col-sm-9 no-right-padding">
  <%= text_field_tag :stock, params[:stock], placeholder: "stock ticker symbol", autofocus: true, class: "form-control form-control-lg" %>
    </div>


  <div class="col-sm-3 no-left-padding">
    <%= button_tag type: :submit, class: "btn  btn-success" do %>
    <%= fa_icon 'search' %>
    <% end %>
  </div>
  </div>

<% end %>
</div>
<div id="results">

</div>

app/views/users/my_portfolio.html.erb

StocksController 类 < ApplicationController

def search
  if params[:stock].present?
  @stock = Stock.new_lookup(params[:stock])
  if @stock
    respond_to do |format|
  format.js { render partial: 'users/result', status: :unprocessable_entity }
   end

   else
    flash[:alert] = "Please enter a valid symbol"
    redirect_to my_portfolio_path
  end

else
  flash[:alert] = "Please enter a symbol to search"
  redirect_to my_portfolio_path
end
end

end
app/controllers/stocks_controller.rb
alert("heelo word")
_result.js.erb
json ruby-on-rails ajax forms respond-to
1个回答
0
投票

这里问题的核心很可能是您正在遵循过时的教程。

渲染 JavaScript 实际上并不是您在 Rails 7 中所做的事情。这就是您如何在使用 Rails Unobtrusive Javascript (Rails UJS) 的旧应用程序之上撒上一点 Ajax 的方式。这并不是很好,因为它实际上包括一遍又一遍地编写相同的蹩脚 JS,以用服务器上呈现的转义 HTML 内容替换某些元素。它完全缺乏任何合理的架构,而且一团糟。

Rails 7 用 Turbo 取代了 Rails UJS 和 Turbolinks,Turbo 一切都做得更好。使用 Turbo,您可以使用

format.turbo
渲染部分内容并将 MIME 类型设置为
text/vnd.turbo-stream.html
。这只是 HTML 块,Turbo 将处理前端内容的替换。如果您需要做一些超出简单流或帧之外的事情,您可以编写刺激控制器。

© www.soinside.com 2019 - 2024. All rights reserved.