我是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 %>
的数据
2条答案
按热度按时间jv4diomz1#
如果你使用的是Rails 7,我建议你改用Stimulus。它更适合在Rails应用程序中运行JavaScript代码。我在所有的Rails应用程序中都使用它,而且它已经安装在每个Rails 7应用程序上了。
我推荐以下教程:
jv2fixgn2#
您正在提交表单,但没有指定响应格式。看起来respond_to使用默认响应格式(而不是JS)进行响应,而您需要指定
palindrome/show.js
来提醒respond_to块您期待JS。