我正在使用rails 5.1,并在HomeController
hello.html.erb
中添加了一个表单:
<%= form_tag do %>
<label for="lookup">Lookup</label>
<%= text_field_tag :lookup %>
<%= submit_tag "Submit" %>
<% end %>
这是我的控制器:
class HomeController < ApplicationController
require 'net/http'
def hello
end
def bye
uri = URI('...')
puts response.body
final_reply = response.body
end
end
我想要做的是,当用户在hello.html.erb
中提交表单时,它应该将:lookup
文本字段发送到bye
的{{1}}操作,然后HomeController
操作会对网站进行API调用,然后获取回复,以便我将其作为JSON在bye
中获取。
我希望此final_reply
必须发送到final_reply
操作,以便我可以在hello
上显示此数据。
如何在AJAX中实现这一目标?
答案 0 :(得分:0)
粗略地说,以下内容应该有效:
<%= form_tag home_bye_path do %>
<label for="lookup">Lookup</label>
<%= text_field_tag :lookup %>
<%= submit_tag "Submit" %>
<% end %>
class HomeController < ApplicationController
require 'net/http'
def hello
@final_reponse = params[:final_response]
end
def bye
uri = URI('...')
puts response.body
redirect_to home_hello_path(final_reply: response.body)
end
end
您可以使用rails routes
和docs检查您的路线,以确定您应该使用home_bye_path
和home_hello_path
的具体内容 - 而不会看到config/routes.rb
我无法更准确。
这不会对任何请求使用AJAX - 就目前而言,最好将表单直接指向hello
并处理那里的处理。或者将bye
视为常规方法,并从hello
调用它以收集所需的数据。
要使用AJAX,您可以将remote: true
添加到form_tag
,尽管这会返回您在页面上直接使用的响应,而不是传递给其他操作。
根据您的描述,我不确定AJAX是否合适,但如果我误解了,请添加更多细节并告诉我。
希望这会有所帮助 - 让我知道你是如何上场的。