ruby Rails中的JavaScript

sf6xfgos  于 9个月前  发布在  Ruby
关注(0)|答案(2)|浏览(130)

我是Rails新手,我的js代码没有运行。我的程序应该在同一页面上输出检查一个数字的回文的结果,而不是切换到一个新的,但是当我按下输出按钮时,什么也没有发生。浏览器中启用了js代码,所有必要的库似乎都已经下载完毕。(不过,你还是可以写信告诉我你需要仔细检查)。浏览器也显示js请求的状态为200。为什么它们不工作?
密码:

# app/controllers/palindrome_controller.rb
class PalindromeController < ApplicationController
  def index; end

  def show
    @number = params[:number]
    @error = validate_input(@number)
    calculate_palindrome unless @error

    respond_to do |format|
      format.js 
    end
  end

  private

  def validate_input(number)
    return 'No number entered' if number =~ /\D/
    return 'The number is already a palindrome' if number == number.reverse

    nil
  end

  def calculate_palindrome
    @number = @number.to_i
    @results = []
    while @number.to_s != @number.to_s.reverse
      @results << @number
      @number += @number.to_s.reverse.to_i
    end
    @results << @number
  end
end

x

<!-- app/views/palindrome/index.html.erb -->
<h1>Testing the palindrome hypothesis</h1>
<%= form_with url: '/palindrome/show', method: 'get', remote: true do %>
  <%= label_tag :number, "Enter a number:" %>
  <%= text_field_tag :number %>
  <%= submit_tag "Check" %>
<% end %>
<div id="results"></div>
# config/routes.rb
Rails.application.routes.draw do
  root 'palindrome#index'
  get 'palindrome/show', to: 'palindrome#show'
end
<!-- app/views/palindrome/show.js.erb -->
<% if @error %>
  $("#results").html("<p><%= @error %></p>");
<% else %>
  var table = "<table><tr><th>Step number</th><th>Current value</th></tr>";
  <% @results.each_with_index do |result, index| %>
    table += "<tr><td><%= index + 1 %></td><td><%= result %></td></tr>";
  <% end %>
  table += "</table>";
  if ("<%= @results.last.to_s %>" == "<%= @results.last.to_s.reverse %>") {
    table += "<p>The hypothesis is confirmed</p>";
  } else {
    table += "<p>The hypothesis has not been confirmed</p>";
  }
  $("#results").html(table);
<% end %>

的数据

jv4diomz

jv4diomz1#

如果你使用的是Rails 7,我建议你改用Stimulus。它更适合在Rails应用程序中运行JavaScript代码。我在所有的Rails应用程序中都使用它,而且它已经安装在每个Rails 7应用程序上了。
我推荐以下教程:

jv2fixgn

jv2fixgn2#

您正在提交表单,但没有指定响应格式。看起来respond_to使用默认响应格式(而不是JS)进行响应,而您需要指定palindrome/show.js来提醒respond_to块您期待JS。

相关问题